[英]Why doesn't the code after this promise invocation run?
當我在將函數交給完成后要運行的承諾后嘗試添加任何代碼時,它將永遠不會運行。 請參閱此示例。
(function() {
var url = //some url that I know works
var promise = $.get(url);
$.when(promise).then(function(xml) {
alert("Promise resolved.");
})();
//This code doesn't run!
alert("Code after promise.");
})();
我認為$.when
之后,執行立即轉到下一行。 這不是使用諾言的全部意義嗎? “已解決承諾”警報運行良好,但是“承諾后代碼”從未出現。 我想念什么?
在此塊之后,您有一個不必要的()
:
$.when(promise).then(function(xml) {
alert("Promise resolved.");
})();
更改為:
$.when(promise).then(function(xml) {
alert("Promise resolved.");
});
其中一條注釋指出,在代碼開頭需要$
。 這不是真的。 您只是在這里創建一個閉包,這是完全可以接受的語法。 但是,我建議您在腳本前加上;
因此,如果將其包含在其他任何閉包之后,則可以確保將其關閉。 在JavaScript中使用閉包時,通常這只是一個好習慣。
(function(){
var url = //some url that I know works
var promise = $.get(url);
//********************************
$.when(promise).then(function(xml){
alert("Promise resolved.");
}); // take this () off
//********************************
//This code will run first
alert("Code after promise.");
})();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.