我想在 JavaScript 中处理XML文件,异步读取每个工作表(因为它显然会更快),并返回最终结果。我有解析器功能,当我想等待每个异步调用完成,然后返回结果时,我卡在了该部分上。在这种情况下,回调对我来说不是最佳做法,因为在另一个模块的开始时会调用此函数,我不想放置其余的代码(让我们这样做)在回调中说例如500行)。
我尝试过很多种方法,最后一种方法如下所示。但它似乎导致无限循环。所有其他尝试都返回未定义的值,因为调用函数在异步调用完成之前结束,并且累加器没有任何值。
1.为了收集每个异步电话的结果,我使用了承诺。
function getAllSheets(callback) {
accumulator = {};
promise.all([
processOneSheetAsync(workbook, sheetname1, ..., callback(data) {
accumulator.one = data;
}),
processOneSheetAsync(workbook, sheetname2, ..., callback(data) {
acc.two = data;
}),
/* some more function calls */
]).then(function(result) {
callback(acc);
});
}
注意:processOneSheetAsync()
是一个返回new Promise
并按预期调用parser()
的函数。
然后我试着在这样的函数中等待它的回调:
function getResult() {
var result;
var callback = false;
getAllSheets(function(data) {
result = data;
callback = true;
});
while(!callback){};
return result;
}
我认为这会阻止getResult()
函数,直到变量callback
设置为true。但是,似乎while
循环从未检测到callback
的更改。
有没有什么好方法可以解决这个问题?