deffered对象如何通知其promise它已被解决
How deffered object notifies its promise that it has been resolved?
我的意思是,如果有一种方式可以让deffered对象通知其promise状态更改,那么任何人都可以用同样的方式触发附加到promise的回调。我想,我的推理中遗漏了一些东西,但我不知道到底是什么。
jQuery的Deferred
返回的promise没有访问解析机制的权限;CCD_ 2中的解析机制可以访问promise和/或其注册的回调。
考虑:
// A D object is a bit like a Deferred
function D() {
// All of these vars are private
var state = "pending";
var resolvedValue = null;
var callbacks = [];
// This is our promise, which is private
var p = {
then: function(callback) {
callbacks.push(callback);
}
};
// Accessor for our promise
this.promise = function() {
return p;
};
// Resolver -- note the promise object doesn't
// offer any access to this, just the D
this.resolve = function(value) {
if (state === "pending") {
state = "resolved";
resolvedValue = value;
// Note that the resolver has access to the callbacks
// that the promise registers
setTimeout(function() {
callbacks.forEach(function(callback) {
try {
callback(resolvedValue);
} catch (e) {
}
});
}, 0);
}
};
}
// Usage
var d = new D();
d.promise().then(function(value) {
console.log("Got " + value);
});
d.resolve("foo");
也就是说,并不意味着是任何一种真正的递延实现,它只是为了证明递延者如何访问promise,而promise却无法解决递延问题。
您可以在源代码中查看jQuery的Deferred
的全部详细信息。但请注意,jQuery的Deferred
有点过时了;如今,拥有两个名称独立的对象(Deferred
和Promise
)已经不流行了。相反,JavaScriptPromise
对象接受一个初始化函数,初始化函数接收一个可以用来解析promise的解析器函数1
1 仍然涉及两个对象:promise和通过调用初始值设定项创建的执行上下文,但这有点技术性
相关文章:
- 使用promise和mongoose对文档进行排序
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 如何解决Access Control Allow Origin错误
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- AngularJS promise在加载数据之前得到解决
- addAssociation上的Promise是用源代码的陈旧版本解决的
- 为什么 Promise.all(array) 没有立即解决
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- AngularJS/Karma-测试函数返回已解决或拒绝的promise
- promise甚至在调用.resolve()之前就得到了解决
- Selenium Webdriver JavaScript: Promise似乎没有得到解决
- new Promise和Promise的区别.在bluebird中解决/拒绝
- Reactjs的render()在promise解决这个问题后不会被触发.setState被重新分配
- 在promise解决后解析值
- WebCrypto:Safari无法导出密钥(),并且promise似乎永远不会解决/失败
- deffered对象如何通知其promise它已被解决
- JavaScript Promise在解决问题时陷入困境
- 只保留解决并忽略被拒绝的promise中的值