【问题标题】:Papa.parse Complex promisePapa.parse 复杂的承诺
【发布时间】:2020-10-31 00:43:42
【问题描述】:

我曾尝试在以下位置使用该解决方案: How to use Promises with PapaParse? 使用带有 Promise 的 Papa.parse,而不是使用内置的回调函数。不幸的是,我的配置要求比给定的示例更复杂,如下所示

Papa.parsePromise = function(file) {
  return new Promise(function(complete, error) {
    Papa.parse(file, {
        delimiter: "",
        newline: "",
        download: true, 
        error,
        complete: function(results){
    var tArray=[];
    var data = results.data;
    var temp = data.length;
    var filledRowCounter=0;
    filePresentMarker=1;
        for(var i=0;i<temp;i++){
            var row = data[i];
            if (row[0]!==""){
            filledRowCounter++; 
            tArray.push(row);
            }
         }
}   
        });
  });
};


Papa.parsePromise("Data/tables.csv")
.then(function(results) { 
  console.log(results); 
  });

填充 tArray 的代码工作正常。然而,没有任何东西被传回给 .then 函数,所以没有任何东西被输出到 console.log

【问题讨论】:

  • 谢谢 - 效果很好(取出错误行后)

标签: javascript promise papaparse


【解决方案1】:

您永远不会在代码中调用 promise 的 resolve 回调。但是,在使用 that code you found 时,您应该尽量减少 new Promise 构造函数中的逻辑,并且当您有“更复杂的配置要求”时,您应该将额外的逻辑放在 then您可以从中return 一个值的回调:

function parsePromise(file) {
  return new Promise((resolve, reject) => {
    Papa.parse(file, {
      delimiter: "",
      ewline: "",
      download: true,
      complete: resolve,
      error: reject
    });
  }).then(({data}) => {
    var tArray = [];
    var filePresentMarker = 1;
    for (const row of data) {
      if (row[0] !== "") {
        tArray.push(row);
      }
    }
    var filledRowCounter = tArray.length;
    return tArray; // or something
//  ^^^^^^^^^^^^^^
  })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2018-01-18
    • 2015-10-06
    • 2018-06-23
    相关资源
    最近更新 更多