构建Promise数组并不起作用,但是单一的承诺可以

时间:2017-09-16 07:14:24

标签: javascript arrays promise

我有一个循环,它调用一个解析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: [ {}, {} ] 

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:3)

我认为您需要Promise.all([...geocodeStack])Promise.all(geocodeStack)

你混合了两种方法,得到了Promise.all([geocodeStack]),它将一个数组数组传递给你的Promise.all,而不是一个Promises数组。