我有一个循环,它调用一个解析Promise的函数,我需要多次调用它。当所有电话都完成后,我想要处理所有的承诺'结果
我有一个奇怪的情况,如果我把呼叫从循环中取出,Promise会解析,我可以在Promise.all块中使用它。 但是,如果我多次调用该函数并将.push转换为数组,我会得到一个正确大小但内部没有对象的数组。
这没有循环工作,我可以看到geocodeResult对象中的数据:
var geocodePromise = geocodeRows(parsed.data[0]);
Promise.all([geocodePromise]).then(function([geocodeResult]) {
console.log("IN PROMISE: " + beautify(geocodeResult, null, 2, 80));
})
.catch(function (error) {
console.log("Error: " + error);
})
.catch(function () {
console.log("Error");
});
然而,通过一个循环的调用:
var geocodeStack = [];
for(j=0; j<parsed.data.length; j++){
geocodeStack.push(geocodeRows(parsed.data[j]));
}
console.log(beautify(geocodeStack, null, 2, 80));
Promise.all([geocodeStack]).then(function([geocodeResult]) {
console.log("IN PROMISE: " + beautify(geocodeResult, null, 2, 80));
})
.catch(function (error) {
console.log("Error: " + error);
})
.catch(function () {
console.log("Error");
});
控制台输出如下所示:
IN PROMISE: [ {}, {} ]
谁能告诉我我做错了什么?
答案 0 :(得分:3)
我认为您需要Promise.all([...geocodeStack])
或Promise.all(geocodeStack)
。
你混合了两种方法,得到了Promise.all([geocodeStack])
,它将一个数组数组传递给你的Promise.all
,而不是一个Promises数组。