簡體   English   中英

為什么這個承諾調用之后的代碼不運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM