我有一個js promise的問題,希望有人能幫助我。下面的函數myFunction執行$ .ajax調用,因此返回一個承諾。因爲我需要手動控制返回給瀏覽器以顯示刷新的div這一功能更新,我遞歸,我稱爲的setTimeout如下:
var nextBitOfWork = function() {
return myFunction(email);
};
setTimeout(nextBitOfWork, 0);
其中myFunction的(這遞歸)現在返回承諾完成之後再做$ .ajax調用。
如果我只需撥打:
return myFunction(email);
沒有setTimeout函數構造以上,承諾通過傳遞和我所有的承諾被捕獲並讓我得到陣列輸出我需要的,一切都很正常,當遞歸結束。但是如果沒有setTimeout,我不會刷新瀏覽器。像上面那樣使用它,我得到了div更新刷新顯示,但似乎失去了承諾,所以腳本繼續下去,我不能填充myFunction在遞歸時構建的數組。
有關如何確保setTimeout可靠地傳遞承諾,以便構建響應數組並顯示div更新的任何想法?
非常感謝您的幫助!
確定 - 現在有以下:
var func = function() {
myFunction(email);
};
return refreshscreen(func,0);
其中refreshscreen是:
function refreshscreen(func,time) {
var timer = $.Deferred();
setTimeout(function() {
return func().then(timer.resolve());
}, time);
return timer.promise();
}
還是一樣的問題 - 雖然瀏覽器呈現DIV,該陣列我建立與myFunction的用於收集$ .ajax響應的長度只有1個元素 - 儘管它遞歸了20次!如果沒有刷新屏幕的調用,數組的構建就很好,但是瀏覽器在我們遞歸的時候不會呈現div!
如何使用回調代替(最終,如果需要)排隊請求? – briosheje
意味着一個非常重要的代碼重寫 - 知道這是可能的承諾,但不知道如何構建settimeout(s)來處理它! –
在您的編輯中,'func'需要返回從'myFunction'收到的許諾。 (你也可以在'setTimeout'內刪除'return') – csum