gpt4 book ai didi

javascript - Console.log 显示数组但无法返回

转载 作者:行者123 更新时间:2023-11-30 07:33:18 25 4
gpt4 key购买 nike

我刚开始使用 promises(我在 Node 中使用“co”)所以我不完全确定这段代码有什么问题:

function* excelToJSON(excelFileNames) {
var jsonData = [];

for (let index = 0; index < excelFileNames.length; index++) {
parseXlsx(excelFilesNames[index], function (err, data) {

jsonData.push(data);
console.log(jsonData); //***Shows data correctly
});
}

console.log(jsonData); //***Empty array
return yield jsonData;
}

它读取文件,转换它,至少在循环中,它正确显示所有内容,但一旦我们离开循环,数据似乎就消失了。我还尝试从循环中返回其中一个值,但这也不起作用。

编辑:parseXlsx 来自此处的“excel”模块:https://github.com/trevordixon/excel.js老实说,我不确定它是异步的还是同步的。这似乎是它的代码,我知道 'extractFiles' 返回一个 promise ,但因为它然后通过 'parseXlsx' 我不确定之后会发生什么:

function parseXlsx(path, sheet, cb) {
if (typeof cb === 'undefined') {
cb = sheet;
sheet = '1';
}
extractFiles(path, sheet).then(function(files) {
cb(null, extractData(files));
},
function(err) {
cb(err);
});
};

编辑2:我用来解决它的是几个答案的组合,感谢你们所有人。

function* excelToJSON(excelFileNames) {
return new Promise(function(resolve, reject) {
var jsonData = [];

if (excelFilesNames === null || excelFilesNames.length === 0) {
reject();
}

for (let index = 0; index < excelFilesNames.length; index++) {
parseXlsx(excelFilesNames[index], function(err, data) {
if (err) {
throw err;
}

jsonData.push(data);

if (jsonData.length === excelFilesNames.length) {
resolve(jsonData);
}
});
}
});
}

最佳答案

只使用一个计数器和何时返回,尝试这样的事情。

function* excelToJSON(excelFileNames) {
var jsonData = [];
var count=0;
for (let index = 0; index < excelFileNames.length; index++) {
parseXlsx(excelFilesNames[index], function (err, data) {

jsonData.push(data);
console.log(jsonData); //***Shows data correctly
if(count==excelFileNames.length){
console.log(jsonData);
return yield jsonData;
}
count++
});
}
}

关于javascript - Console.log 显示数组但无法返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com