我希望在不使用jQuery的情况下实现基本的Deferred对象。在这里,我将只实现done和fail回调函数,并使用resolve和reject函数,当然还要将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()
方法。如果我从Deferred()
函数中返回'd.promise',那么这个对象将没有resolve
和reject
函数。
请指出我犯了什么错误以实现Deferred
对象的简单目标。
这是我正在做的fiddle:http://jsfiddle.net/SyEmK/14/