1
我正在使用Windows 8 JavaScript應用程序,而WinJS.Promise沒有像我期望的那樣工作。這裏是我的異步方法...WinJS.Promise不按我期望的那樣工作
function MyFiveSecondFunctionAsync() {
return new WinJS.Promise(function (c, e, p) {
var start = new Date().getTime();
var delay = 5000;
while (new Date().getTime() < start + delay) p();
c();
});
}
這裏就是我有...
document.querySelector("#status").innerText = "working";
MyFiveSecondFunctionAsync().done(function() {
document.querySelector("#status").innerText = "done";
});
document.querySelector("#status").innerText = "free";
這是一個按鈕,點擊調用它。我希望我的狀態div在我單擊按鈕後很簡短地說「工作」,但是在5秒內說「空閒」,最後在5秒延遲結束時說「完成」。相反,UI線程阻塞了5秒,然後狀態div顯示「free」。
我認爲執行會返回到將狀態設置爲「空閒」的行,但調試表明它在此之前觸發了promise函數。所以5秒後狀態設置爲「完成」,然後設置爲「空閒」。換句話說,我的異步函數只是不會異步操作。
承諾不創建線程。如果您運行旋轉循環,則會阻止UI線程。特別是,您傳遞給'WinJS.Promise'的函數在創建promise時同步運行,因此您在構建過程中正在執行旋轉循環。看起來你正在嘗試創建超時承諾。對此已經有Promise.timeout了。 –
謝謝,雷蒙德!我誤解了它。 –