2016-03-09 3 views
1

Я использую papa parse для чтения большого .csv и копирования его содержимого в массив в моем коде. Если я выполню код ниже, консоль сначала показывает второй журнал, как пустой массив. Я бы предположил, что он будет заполнен содержимым .csv, вызвав функцию parseMe, прежде чем она будет снова записана?Papa Parse: скопируйте массив из .csv в мой код

function parseMe(url, callBack){ 
    Papa.parse(url, { 
     complete: function(results) { 
     callBack(results.data[0]); 
     } 
    }); 
} 

function doStuff(data){ 
    newArray=data; 
    console.log(newArray); //log no. 1 
} 

var newArray=[]; 
parseMe(document.getElementById("file").files[0], doStuff); 
console.log(newArray); //log no. 2 
+0

На какой вопрос вы хотите ответить? – whipdancer

ответ

1

Причина, по которой ваш «журнал нет. 2» показывает пустой массив результата является то, что массив еще не был разобран при запуске, что строка кода. Если добавить идентифицирующий текст на выходе журнала вы увидите что-то вроде этого:

(Log no.2) After parse call but before complete fired, newArray: [] 

(Log no.1) In OnComplete callback, Array is: [ populated_array ] 

То есть, порядок исполнения заключается в следующем:

  1. Papa синтаксического разбора начинается входной файл
  2. № регистрации. 2 выхода, показывая пустой результирующий массив
  3. Papa разбора заканчивает разбор входного файла
  4. The на полных обратных вызовов пожаров
  5. Log нет. 1 выходы, показывающие населенной результирующий массив

Рабочая ручка: http://codepen.io/sensei/pen/mPPKBP/

Ключевым понятием здесь является асинхронное выполнение; Я рекомендую прочитать на JavaScript Promises (blogpost, MDN reference) для современного API, который поможет вам понять реализацию веб-приложения этой ключевой концепции вычислений.

Смежные вопросы