我有一个循环调用一个函数来解析一个承诺,我需要多次调用。当所有的通话都完成后,我想处理所有的承诺结果。建立一个承诺阵列不起作用,但单个承诺做
我有一个奇怪的情况,如果我把呼叫从循环中解放出来,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: [ {}, {} ]
谁能告诉我我做错了什么?
为什么你创建了两个'catch'回调?你不会在第一个“catch”回调中抛出错误,所以第二个不需要。 – alexmac
此外,在第一个例子中,你不需要'Promise.all',只需使用'geocodePromise.then(...' – alexmac
谢谢 - 这只是因为代码被删除以便于阅读。同意,我只是使用Promise.all都在这两个例子中,所以它是可比较的。 –