Javascript Как не использовать глобальные переменные при создании массивов для доступа из разных функций - PullRequest
0 голосов
/ 12 июня 2018

Я читаю некоторые данные с помощью Papa Parse и возвращаю результат в unpack.Я хочу иметь возможность использовать созданные массивы в других функциях.(что-то вроде console.log(unpack(data)) снаружи unpack.

Как я называю массивы?

//read data from csv 
function parseData(file, callback) {
    Papa.parse(file, {
        download: true,
        complete: function(results) {           
            callback(results.data);
        }
    });
}

// want to use the created arrays in other functions.
function unpack(data) {
    var locations = [];
    var bsis = [];
    var lngs = [];
    var lats = [];

    for (var i = 0; i < data.length; i++) {
        locations.push(data[i][2]);
        bsis.push(data[i][3]);
        lats.push(data[i][4]);
        lngs.push(data[i][5]);
    }
    return [locations, bsis, lats, lngs];
}

Я называю это с

parseData("data/Runs/csvs/csvs_with_latlon/ShelterRun1.csv", unpack);

1 Ответ

0 голосов
/ 12 июня 2018

Если у вас есть обратные вызовы, вам придется иметь дело с этим на этом этапе.

Если вы не хотите использовать глобал, вам просто нужно вложить функции на неопределенный срок:

const A = (a, callback) => callback(a+5)
const B = (r, callback) => callback(r + 5);

A(5, (r) => B(r, console.log))

Невозможно просто вернуть его из обратных вызовов.

Тем не менее, вам не нужно иметь его действительно на высшем уровнеГлобальный.Он может быть «глобальным» внутри другой функции:

const A = (a, callback) => callback(a+5)
const B = (r, callback) => callback(r+5)

const run = () => {
  let result;
  
  A(5, r => B(r, r => { result = r }));
  
  setTimeout(() => console.log(result), 50);
}

run()

Тем не менее, поскольку обратные вызовы являются асинхронным шаблоном, вы не можете принудительно заставить асинхронный режим быть синхронным, поэтому для использования глобального за пределами обратных вызовов вам все равнодолжен иметь какой-то тип ожидания или другой асинхронный шаблон для проверки результата.

...