cod*_*ode 7 javascript jquery deferred jquery-deferred
我想在不使用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);
});
Run Code Online (Sandbox Code Playgroud)
但上面给出了错误: Object #<Object> has no method 'fail'
我知道返回的对象'd'的Deferred()
函数没有方法done().如果我从这返回d.promise Deferred()
将没有解决和拒绝功能.
请指出我为实现Deferred对象的简单目标所犯的错误.
这是我正在做的小提琴:http://jsfiddle.net/SyEmK/14/
THE*_*had 20
function Deferred(){
this._done = [];
this._fail = [];
}
Deferred.prototype = {
execute: function(list, args){
var i = list.length;
// convert arguments to an array
// so they can be sent to the
// callbacks via the apply method
args = Array.prototype.slice.call(args);
while(i--) list[i].apply(null, args);
},
resolve: function(){
this.execute(this._done, arguments);
},
reject: function(){
this.execute(this._fail, arguments);
},
done: function(callback){
this._done.push(callback);
},
fail: function(callback){
this._fail.push(callback);
}
}
var v;
var setVal = function() {
var d = new Deferred();
setTimeout(function() {
v = 'a value';
d.resolve(this);
}, 5000);
return d;
};
setVal().done(function() {
console.log('all done :' + v);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7115 次 |
最近记录: |