Переместить результаты papaparse в массив - PullRequest
1 голос
/ 08 марта 2019

Я использую papaparse для анализа локального файла CSV, используя следующее:

    var display_links = [];
Papa.parse(file_links, {
    header: true,
    download: true,
    dynamicTyping: true,
    complete: function (results) {
        results.data.push(display_links)
    }
});
console.log(display_links)

Как поместить результаты анализа в локальный массив, чтобы я мог использовать его в других функциях / процессах?

console.log(display_links)

Возвращает пустой массив.

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

В вашей полной функции вы можете заменить results.data.push(display_links) переназначением: display_links = results.data;.Кажется, у вас это задом наперед.

Если вы объявили display_links вне этой области действия функции, у вас должен быть доступ к результатам позже.Поэтому простое решение - просто вытащить его из локальной области.

Если это невозможно, приведите более полный пример.

let display_links = [];

function doSomethingWithDisplayLinks(results) {
  display_links = results;
}

console.log('display_links before:', display_links);
doSomethingWithDisplayLinks(['http://www.google.com']);
console.log('display_links after:', display_links);
1 голос
/ 09 марта 2019

Столкнулся с аналогичной проблемой с Papaparse или, насколько я знаю, с библиотекой и обратными вызовами. Хотя я могу указать вам направление, в котором вы сможете найти ответ для себя.

Во-первых, ваш display_links создает пустой массив, потому что при синтаксическом анализе файла через Papaparse complete - это асинхронная функция обратного вызова, которая означает, что ваше присвоение display_links внутри обратного вызова происходит асинхронно после выбранного вами файла. полностью обработан. Поэтому, когда вы регистрируете свою переменную, ей еще не присвоен результат. Короче говоря, это не будет работать.

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

Посмотрите на Asynchronous JS и узнайте, как работает обратный вызов, чтобы найти для себя более оптимальное решение, если оно не работает для вас.

Примечание: моя проблема в том, что я хотел абстрагироваться от синтаксического анализа и других связанных действий внутри функции, и как только файл был прочитан / проанализирован, эта функция вернет конечный результат обратно . Эта последняя часть повторного задания конечного результата - это то, чего я не могу выполнить, так как я думаю, что вы можете только двигаться вперед и вызывать другую функцию из обратного вызова complete, а возврат не работает: /

Ссылка -

...