我正試圖在我的promise中創建一些嵌套的'while'
循環。當我執行log.asyncCall().then(...)
時,我開始遇到麻煩,我的IDE馬上告訴我,箭頭功能將直接跳轉到.then()
,其中包含return innerFunc()
,甚至沒有進入if statement
。我認爲競賽條件並未按照我希望的順序執行。在promise中執行嵌套'while'循環
總結什麼,我想實現:
根據outerFunc
我想執行innerFunc
這3次。
什麼innerFunc
確實一次又一次地呼叫.asyncCall()
只要log
不是null
。如果innerFunc
無法生成log
,請退出'while'
循環。
我也很難找到調試承諾的好方法。我目前使用WebStorm
的調試功能。
var i = 0
const outerFunc =() => {
return new Promise(resolve => {
if (i < 3) {
i++
const innerFunc =() => {
return new Promise(resolve => {
return log.asyncCall().then(lg => {
if (lg) {
// some logic
} else {
resolve()
}
}).then(() => {
// continue iterating innerFunc()
return innerFunc();
});
})
};
// first iteration innerFunc()
return innerFunc().then(() => {
// once innerFunc() is complete, reiterate outerFunc()
return outerFunc();
});
} else {
resolve();
}
});
}
注意:'。然後(()=> {返回innerFunc()})'是更好地寫成'.then(innerFunc)' – Alnitak
另外,你是否期待'log.asyncCall'中使用的'log'變量具有從前一次迭代中收到的值? (它沒有) – Alnitak
@Alnitak對不起,不好的選擇變量名 – Liondancer