如果我想自己推迟实施,那么这是一种正确的方法(尝试理解内部逻辑):
延迟算是一种行为模式吗?
延期和承诺之间有什么区别?
function Deferred() {
var d = {},
f = {},
a = {},
state = 'pending';
return {
resolve: function(){
state = 'resolved';
a.fn.apply(a.context, arguments);
d.fn.apply(d.context, arguments);
},
reject: function(){
state = 'rejected';
a.fn.apply(a.context, arguments);
f.fn.apply(f.context, arguments);
},
done: function(fn, context) {
d = {fn: fn, context: context};
return this;
},
fail: function(fn, context) {
f = {fn:fn, context: context};
return this;
},
always: function(fn, context) {
a = {fn:fn, context: context};
return this;
},
state: state
}
}
应用示例:
var obj = Deferred();
obj.done(function(arg){
console.log('we are done here. why? -', arg);
}, window)
.always(function(arg){
console.log('print that in any case. and some details:', arg);
}, window)
.fail(function(arg){
console.log('we failed here. why? -', arg);
}), window;
obj.reject('some arguments');
obj.resolve({argument: 'hooray!'});
答案 0 :(得分:2)
如果我想自己推迟实施,这是一种正确的方法吗?
不,你的代码遗漏了几个要点:
您可能需要查看this example implementation或How is a promise/defer library implemented?。
此外,对于承诺,您需要实现可互操作的then
链接方法,其行为在Promises/A+ specification中进行了描述。
延迟算是一种行为模式吗?
是的,你可以将它们视为观察者或访客模式的混合物。
延期和承诺之间有什么区别?
通常,deferred确实提供了实现或拒绝的方法,而promise是安装回调的接口(没有解析promise的能力)。有关详细信息,请参阅What are the differences between Deferred, Promise and Future in JavaScript?。