我想在不使用 jQuery 的情况下实现基本的 Deferred 对象。在这里,我将仅使用解决和拒绝功能实现完成和失败回调。promise
当然,方法与此功能相关联。
我正在纯 js 中执行以下实现(已编辑):
function Deferred() {
var d = {};
d.resolve = function() {
d.done(arguments);
}
d.reject = function() {
d.fail(arguments);
}
d.promise = function() {
var x = {};
x.done = function(args) {
return args;
}
x.fail = function(args) {
return args;
}
return x;
}
return d;
}
var v;
var setVal = function() {
var d = new Deferred();
setTimeout(function() {
v = 'a value';
d.resolve(this);
}, 5000);
return d.promise();
};
setVal().done(function() {
console.log('all done :' + v);
});
但上面给出了错误:Object #<Object> has no method 'fail'
我知道Deferred()
函数的返回对象“d”没有方法 done()。如果我从中返回 d.promiseDeferred()
将没有解决和拒绝功能。
请指出我为实现延迟对象的简单目标而犯了什么错误。
这是我正在做的小提琴:http: //jsfiddle.net/SyEmK/14/