3 回答
TA贡献1812条经验 获得超5个赞
承诺/ A +规范的第2.1节列出了三种承诺状态。
从规格:
以下是您询问的每个术语:
待定是最初的承诺状态。承诺所代表的业务尚未被填写或拒绝。
实现是三个承诺国家中的另一个。这意味着承诺已经解决,现在已经解决了价值。承诺所代表的操作已成功完成。
被拒绝是三个承诺状态中的另一个。这意味着承诺已经被拒绝,现在已经被拒绝了。promise所代表的操作无法获取值,因此有理由不这样做(通常是错误代码或错误对象,但它可以是任何东西)。
定居是一个术语,意味着承诺要么得到满足要么被拒绝(例如它不再等待),但它不是一个单独的状态,只是一个描述性术语,表明它不再是未决状态。
已解决的术语通常用于表示相同fulfilled
,但两者并不完全相同。承诺可以通过导致履行的价值来解决,或者可以通过拒绝的承诺(这导致拒绝承诺)来解决,或者可以通过未决承诺解决(这意味着它现在将等待最终的承诺)其他一些承诺的状态)。
推迟确切地说出你的意思很难。Promise通常被归类为deferred
对象,因为它们是一个对象,表示一个行为和结果,推迟到将来(它将在未来发生)。在一些promises实现中,实际上有两种类型的对象,一个deferred
对象和一个promise
对象。延迟对象是promise对象的超集。两者都可以观察何时使用.then()
处理程序解决或拒绝操作。但是,只有deferred
对象实际上可以将状态更改为resolved
或rejected
。
在jQuery中,您可以使用创建延迟对象$.Deferred()
。在其他实现中,例如ES6 promise,你只需要具有构造函数回调的promise对象,它具有函数reject
和resolve
函数。世界可能正朝着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(); });
添加回答
举报