Javascript Promise

2013年4月22日

在 Javascript 中,Promise 是表示异步操作的待处理结果的对象。您可以使用它们来在异步操作完成后通过提供回调来安排进一步的活动。

    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 Promise)中,组合的 Promise 将在所有传递的 Promise 成功时运行其 done 处理程序,如果任何一个失败则运行其 fail 处理程序。

Javascript 中有各种形式的 Promise,令人讨厌的是它们具有细微不同的 API 和词汇。可能最常用的是 jQuery 的 Deferred 对象

您还会听到这些概念被描述为 FuturesDeferreds。这些概念出现在许多语言中,而不仅仅是 Javascript,通常与并发一样多地考虑异步性。

有关更多信息,我建议您获取 Trevor Burnham 的 Async JavaScript 的副本。如果您想要一篇网络文章,我发现 Burnham 有一篇 简短但有用的文章 对它们进行了总结。