为了账号安全,请及时绑定邮箱和手机立即绑定

什么是javascript承诺的正确术语

什么是javascript承诺的正确术语

泛舟湖上清波郎朗 2019-08-08 16:58:30
什么是javascript承诺的正确术语我对被抛出的不同术语感到困惑。根据我的理解,承诺可以是:fulfilled rejected pending  settled resolved defer解决意味着解决了吗?还是意味着它实现了?什么是推迟的?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

承诺/ A +规范的第2.1节列出了三种承诺状态。

从规格:

以下是您询问的每个术语:

待定是最初的承诺状态。承诺所代表的业务尚未被填写或拒绝。

实现是三个承诺国家中的另一个。这意味着承诺已经解决,现在已经解决了价值。承诺所代表的操作已成功完成。

被拒绝是三个承诺状态中的另一个。这意味着承诺已经被拒绝,现在已经被拒绝了。promise所代表的操作无法获取值,因此有理由不这样做(通常是错误代码或错误对象,但它可以是任何东西)。

定居是一个术语,意味着承诺要么得到满足要么被拒绝(例如它不再等待),但它不是一个单独的状态,只是一个描述性术语,表明它不再是未决状态。

已解决的术语通常用于表示相同fulfilled,但两者并不完全相同。承诺可以通过导致履行的价值来解决,或者可以通过拒绝的承诺(这导致拒绝承诺)来解决,或者可以通过未决承诺解决(这意味着它现在将等待最终的承诺)其他一些承诺的状态)。

推迟确切地说出你的意思很难。Promise通常被归类为deferred对象,因为它们是一个对象,表示一个行为和结果,推迟到将来(它将在未来发生)。在一些promises实现中,实际上有两种类型的对象,一个deferred对象和一个promise对象。延迟对象是promise对象的超集。两者都可以观察何时使用.then()处理程序解决或拒绝操作。但是,只有deferred对象实际上可以将状态更改为resolvedrejected

在jQuery中,您可以使用创建延迟对象$.Deferred()。在其他实现中,例如ES6 promise,你只需要具有构造函数回调的promise对象,它具有函数rejectresolve函数。世界可能正朝着ES6的方向发展。

使用deferred对象的jQuery示例:

function delay(t) {
    var defer = $.Deferred();
    setTimeout(function() {
        defer.resolve();
    }, t);
    return defer.promise()
 }

 delay(200).then(function() {
     // run my delayed function now
     doMyThing();
 });

ES6承诺示例:

 function delay(t) {
     return new Promise(function(resolve, reject) {
         setTimeout(function() {
             resolve();
         }, t);
     });
 }

 delay(200).then(function() {
     // run my delayed function now
     doMyThing();
 });


查看完整回答
反对 回复 2019-08-08
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

Domenic Denicola的“ 国家和命运 ”是一个很好的,精辟的总结。

状态:

  • 如果将“尽快”呼叫f,我们将履行承诺promise.then(f)

  • 如果将“尽快”调用r,则拒绝承诺promise.then(undefined, r)

  • 如果未履行或拒绝,则承诺正在等待

命运:

  • 如果试图解决或拒绝承诺,则承诺得到解决,即承诺已被“锁定”以遵循另一承诺,或已履行或拒绝

  • 如果未解决,则承诺得到解决,即如果试图解决或拒绝它将对承诺产生影响。

请点击链接了解“有关状态和命运”的详细信息。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 451 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信