Так как обратный вызов Papa parse complete
вызывается асинхронно, вам нужно дождаться его завершения - однако, похоже, что parse parse не использует Promises, поэтому вы можете "обещать" функцию синтаксического разбора следующим образом
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
Другой способ взглянуть на эту функцию, если вы не понимаете нотацию =>
, - это
function papaParsePromise(blob) {
return new Promise(function(resolve) {
Papa.parse(blob, {
complete: function(data) {
resolve(data);
}
);
});
}
, которая возвращает обещание, которое разрешается переданным данным на полный обратный вызов
Вашему коду также нужно дождаться обещания, возвращенного getData
, прежде чем он сможет использовать что-либо в этих данных. Если ваш код не находится внутри другой функции async
, вам нужно будет использовать метод обещания .then
, как показано ниже
const data_url = "acdata.csv";
async function getData() {
// create a function that returns a Promise that resolves when papa parse complete is called
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
const response = await fetch(data_url);
const blob = await response.blob();
const data = await papaParsePromise(blob);
return data;
};
getData()
.then(parse_data => {
console.log(parsed_data);
console.log(parsed_data[0]);
// i.e. do what you need with parsed_data here
});
, если, однако, вы вызываете getData
внутри функции async
- вместе с изменениями getData
выше, вы можете просто использовать await getData()
для ожидания значения - то есть
async function someFunction() {
const parsed_data = await getData();
// do what you need with parsed_data here
}