我有一個循環調用一個函數來解析一個承諾,我需要多次調用。當所有的通話都完成後,我想處理所有的承諾結果。建立一個承諾陣列不起作用,但單個承諾做
我有一個奇怪的情況,如果我把呼叫從循環中解放出來,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都在這兩個例子中,所以它是可比較的。 –