Javascript Promise

2013 年 4 月 22 日

在 Javascript 中,承諾是表示非同步操作的待處理結果的物件。您可以透過提供回呼,在非同步操作完成後使用這些物件來排程進一步的活動。

    aPromise = someAsyncOperation();
    aPromise.done(function() {
      // runs if all went well
    });
    aPromise.fail(function() {
      // runs if something went wrong
    });
    aPromise.always(function() {
      // runs either way
    }); 

除了提供一個明確的介面來排程非同步任務的活動外,它們還可以組成。

      composedPromise = $.when(anAsyncFunction(), anotherAsyncFunction());
    

在這種形式中(使用 jQuery 承諾),組成的承諾會在所有傳遞的承諾成功時執行其完成處理常式,如果其中任何一個失敗,則會執行其失敗處理常式。

javascript 中有各種形式的承諾,令人討厭的是它們有微妙不同的 API 和詞彙。最常用的可能是 jQuery 的延遲物件

您還聽說這些概念被描述為期貨延遲。這些概念出現在許多語言中,不只是 javascript,通常同時考慮並行性和非同步性。

有關更多資訊,我建議取得 Trevor Burnham 的 非同步 Javascript 副本。如果您想要網路文章,我發現 Burnham 有 一篇簡短但有用的文章 來總結它們。