2017-04-11 58 views
-5

我想等到承諾完成後再繼續執行for循環。請看下面的類似代碼。現在,循環將運行多次並運行所有的承諾,但這不適合我的應用程序。我需要程序運行while循環,運行promise,等到解析完成,檢查10秒是否已經通過,或者已經設置了用戶變量,如果沒有,再次運行。如何等到承諾完成後才繼續循環

var p = promiseReturnedFromAFunction(); 
var time = new Date().getTime(); 
var user = 'undefined'; 
while(user === 'undefined' && Math.abs(time - new Date().getTime()) < 10000) { 
    p.then(() => { 
     if(somecondition) { 
       user='user'; 
       break; 
     } 
    }) 
    //Code should wait here until the above promise is done before continuing 
} 

如果有人可以幫助我,這將不勝感激。

+0

你可以把你的代碼放在回調裏面嗎? –

+0

你能詳細解釋一下嗎?我應該在哪裏放置什麼代碼? – AllAnimals

+0

p.then(()=> {if(somecondition){}/*把你的代碼放在這裏* /})//不在這裏) –

回答

-1
var p = promiseReturnedFromAFunction(); 
var time = new Date().getTime(); 
var user = 'undefined'; 

p.then(() => { 
    while(user === 'undefined' && Math.abs(time - new Date().getTime()) < 10000) { 
     if(somecondition) { 
       user='user'; 
       break; 
     } 
    } 
}); 

我想你已經倒過來了。你想等待承諾解決,然後循環你的條件檢查,以確保用戶設置或時間已過。

+0

如果用戶和時間條件不符合,我將如何從該函數內再次調用p? – AllAnimals

+0

爲什麼你需要再次運行p?您只需運行循環並檢查當時的其他條件。 –

+0

承諾的值可能隨時間而改變。這就是爲什麼我需要再次檢查 – AllAnimals

-1

我不清楚你想達到的目標是什麼。是否試圖確定一個值,如果不能,每X秒重試一次?每X秒刷新一次數值?

我可以給出的唯一直接的建議是,一旦你必須等待承諾,你一般需要/希望繼續與其他承諾並解決。你不想試圖「阻止」承諾,打破它。所以你要麼解決p,然後在解決方案中循環,或者你應該反轉一下邏輯,並寫一個循環,檢查somecondition並且只有在確實如此時才解決p

相關問題