【问题标题】:How can I prevent my code from proceeding until papaparse finishes?在 papaparse 完成之前,如何防止我的代码继续执行?
【发布时间】:2020-10-14 15:13:23
【问题描述】:

我需要 papaparse 来完成它,然后它才会移动到它在列表中循环的部分(即 papaparse 需要填充的部分)。

在我的代码中,papaparse 在循环之后完成填充列表,因此我的循环最终会在一个空列表上循环。这是我的代码的样子:

const csvData=[];
papa.parse(file, {
  header: true,
  step: function(result) {
    csvData.push(result.data)
  },
  complete: function(results, file) {
    //console.log('Complete', csvData.length, 'records.'); 
    console.log(csvData);
  }
});

//loop through the list
for (var i = 0; i < csvData.length; i++){
    var jsonObj = csvData[i];
    console.log(jsonObj);
    let aimObj = jsonToAim(jsonObj);
    console.log(aimObj);
}

我该怎么做?我是 js 新手。非常感谢!

【问题讨论】:

  • 你需要把你的循环放在complete: function中。
  • 这就是 Promises 和 async/await 的用途。
  • 你可以查看这个链接,它已经回答了link

标签: javascript node.js papaparse


【解决方案1】:

您可以将 parse-call 包装在一个 Promise 中并等待这个 Promise:

async function processCsv (file) {
  const csvData = await new Promise((resolve) => {
    const data = [];
    papa.parse(file, {
      header: true,
      step: function (result) {
        data.push(result.data);
      },
      complete: function (results, file) {
        resolve(data);
      }
    });
  });
  
  for (let i = 0; i < csvData.length; i++) {
    // ...
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2011-11-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多