gpt4 book ai didi

javascript - 不使用 jquery 实现 Deferred 对象

转载 作者:数据小太阳 更新时间:2023-10-29 04:25:13 24 4
gpt4 key购买 nike

我想在不使用 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()。如果我从 Deferred() 返回 d.promise这将没有解决和拒绝功能。

请指出我在实现延迟对象的简单目标时犯了什么错误。

这是我正在做的 fiddle :http://jsfiddle.net/SyEmK/14/

最佳答案

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);
});

关于javascript - 不使用 jquery 实现 Deferred 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18096715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com