jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 在不使用jquery的情况下实现Deferred对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在不使用jQuery的情况下实现基本的Deferred对象.在这里,我将仅实现已完成和失败的回调,具有解析和拒绝功能.和ofCourse将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>没有方法’失败’

我知道Deferred()函数的返回对象’d’没有方法done().如果我从Deferred()返回d.promise,则不会有解析和拒绝函数.

请指出我为实现Deferred对象的简单目标所犯的错误.

这是我正在做的小提琴: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,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对象全部内容,希望文章能够帮你解决javascript – 在不使用jquery的情况下实现Deferred对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。