0
我正在與嵌套的諾言循環搏鬥,並且無法找到工作解決方案。承諾循環嵌套數組
我環顧四周,發現這一點:https://stackoverflow.com/a/29396005/3560729
的promiseWhile功能似乎有什麼,我需要,但我遇到了麻煩嵌套返回到外環
promiseWhile:
function promiseWhile(predicate, action) {
function loop() {
if (!predicate()) return;
return Promise.resolve(action()).then(loop);
}
return Promise.resolve().then(loop);
}
嵌套循環:
let outerArray = outerArrayOfObjects;
let returnArray = [];
let returnArrayIndex = 0;
let outerIndex = 0;
let outerLength = outerArray.length;
let passObject = { };
promiseWhile(function() {
return outerIndex < outerLength;
}, function() {
let innerIndex = 0;
let innerLength = outerArray[outerIndex].innerArray.length;
passObject = {
innerObject: outerArray[outerIndex].innerArray[innerIndex],
returnArray: returnArray,
returnArrayIndex: returnArrayIndex
};
promiseWhile(function() {
return innerIndex < innerLength;
}, function() {
return new Promise(function(resolve, reject){
Promise.all([
promiseFunction1(innerObject),
promiseFunction2(innerObject),
promiseFunction3(innerObject),
])
.then(function (allMappings) {
passObject.returnArray[returnArrayIndex++] = {
"result1": allMappings[0],
"result2": allMappings[1],
"result3": allMappings[2]
}
offersIndex++;
return resolve(passObject)
})
.catch(function (err) {
offersIndex++;
return reject(err);
})
})
})
outerIndex++;
}).then(function() {
return resolve(passObject);
});
})
}
我認爲我的主要問題是:我在哪裏處理結果?我應該如何傳遞這樣的值,以便返回數組構建正確?
你能總結一下,也許你想更廣泛地完成什麼?看起來你有一個數組的數組,並且你想遍歷每一個元素並在每個元素上調用3個異步函數,然後將這3個異步調用的結果存儲在一個新的數組中(數組?)...是那裏發生了什麼?另外:處理的順序是否重要?你需要知道整個過程何時完成? –
我有一個包含對象數組的對象,其中一個是我需要循環並執行一組promise函數的數組。我最終以一種完全不同的方式使用藍鳥,我會發布答案 – GForce