jquery中对于批量deferred的处理方法

此代码仿照jquery源码中$.when()的实现

代码如下:

function test(i) {
    var dfd = $.Deferred();
    if(i%2 == 0) {
        console.log("resolve " + i);
        dfd.resolve();
    } else {
        console.log("failure " + i);
        dfd.reject();
    }

return dfd.promise();
}
function call() {
    var dfd = $.Deferred();
    var remain = 10;
    for(var i=0;i< 10;i++){
        test(i).done(function() {
            if(!(--remain)) {
                dfd.resolve();
            }
        }).fail(function() {
            if(!(--remain)) {
                dfd.resolve();
            }
        })
    }
    return dfd.promise();
}

call().done(function() {
    console.log("all finished");
});

输出结果:

代码如下:

resolve 0 test.js:4
failure 1 test.js:7
resolve 2 test.js:4
failure 3 test.js:7
resolve 4 test.js:4
failure 5 test.js:7
resolve 6 test.js:4
failure 7 test.js:7
resolve 8 test.js:4
failure 9 test.js:7
all finished

(0)

相关推荐

  • jQuery Deferred和Promise创建响应式应用程序详细介绍

    这篇文章,我们一起探索一下 JavaScript 中的 Deferred 和 Promise 的概念,它们是 JavaScript 工具包(如Dojo和MochiKit)中非常重要的一个功能,最近也首次亮相于 流行的 JavaScript 库 jQuery(已经是1.5版本的事情了). Deferred 提供了一个抽象的非阻塞的解决方案(如 Ajax 请求的响应),它创建一个 "promise" 对象,其目的是在未来某个时间点返回一个响应.如果您之前没有接触过 "promis

  • 利用jQuery的deferred对象实现异步按顺序加载JS文件

    前段时间看了阮一峰的jQuery的deferred对象详解一文,对jQuery中的deferred的用法了一些了解,今天看到园子里的一篇文章:关于重构JS前端框架的失败经验(顺便怀念那些死去的代码),于是把我之前写的一个利用jQuery的deferred异步按顺序加载JS文件方案分享出来,欢迎指正. 如果你现在对jQuery中的deferred还不了解,强烈建议你看一下阮一峰的jQuery的deferred对象详解一文. 加载JS文件的代码如下: 复制代码 代码如下: /* Loading Ja

  • 在jQuery1.5中使用deferred对象 着放大镜看Promise

    引言在那篇经典的关于jQuery1.5中Deferred使用方法介绍的文章中(译文见这里),有下面一段描述: $.ajax() returns an object packed with other deferred-related methods. I discussed promise(), but you'll also find then(), success(), error(), and a host of others. You don't have access to the c

  • jQuery之Deferred对象详解

    deferred对象是jQuery对Promises接口的实现.它是非同步操作的通用接口,可以被看作是一个等待完成的任务,开发者通过一些通过的接口对其进行设置.事实上,它扮演代理人(proxy)的角色,将那些非同步操作包装成具有某些统一特性的对象,典型例子就是Ajax操作.网页动画.web worker等等. jQuery的所有Ajax操作函数,默认返回的就是一个deferred对象. Promises是什么 由于JavaScript单线程的特点,如果某个操作耗时很长,其他操作就必需排队等待.为

  • jQuery 源码分析笔记(3) Deferred机制

    Deferred把回调函数注册到一个队列中,统一管理,并且可以同步或者异步地调用这些函数.jQuery.Deferred()用来构造一个Deferred对象.该对象有状态值,共有三种: Rejected, Resolved和初始状态.其中Resolved表示该操作成功完成了,而Rejected 则表示出现了错误,调用失败.Deferred对象的主要成员如下: done(callback): 注册一个callback函数,当状态为resolved时被调用. * fail(callback): 注册

  • jQuery源码分析-05异步队列 Deferred 使用介绍

    5. 异步队列 Deferred 5.1 概述 异步队列是一个链式对象,增强对回调函数的管理和调用,用于处理异步任务. 异步队列有三种状态:初始化(unresolved),成功(resolved),失败(rejected). 执行哪些回调函数依赖于状态. 状态变为成功(resolved)或失败(rejected)后,将保持不变. 回调函数的绑定可以是同步,也可以是异步的,即可以在任何时候绑定. (本节中的 绑定 注册 增加 具有相同的含义) 5.2 关键方法 先看看jQuery. Deferre

  • jquery基础教程之deferred对象使用方法

    一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的. 通常的做法是,为它们指定回调函数(callback).即事先规定,一旦它们运行结束,应该调用哪些函数. 但是,在回调函数方面,jQuery的功能非常弱.为了改变这一点,jQuery开发团队就设计了deferred对象. 简单说,deferred对象就是jQuery的回调函数

  • 在jQuery 1.5中使用deferred对象的代码(翻译)

    译者注:1. Deferred是jQuery1.5新增的一个特性,很多人把它翻译成 "异步队列",我觉得比较靠谱,毕竟和"延迟"没啥关系,不过这篇文章中我还采用deferred这个单词. 2. 这篇文章在jQuery1.5发布博客中提到,也是目前介绍deferred比较经典和深入的文章.鉴于目前中文资料比较少,特别翻译出来供大家学习参考. 3. 通篇采用意译的方式,如有不当还请大家提出. jQuery1.5中新增的Deferreds对象,可以将任务完成的处理方式与任

  • jQuery中deferred对象使用方法详解

    在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数.同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象. 那就来看看deferred对象的用法. 1.ajax的链式回调 // ajax方法返回的是一个deferred对象,可以直接使用链式写法 $.ajax('test.json').done(function(resp){ // done 相当于success回调,其中默认的参数为success回调的

  • jQuery的deferred对象使用详解

    这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax.为了实现它,jQuery的全部ajax代码都被改写了. 但是,它比较抽象,初学者很难掌握,网上的教程也不多.所以,我把自己的学习笔记整理出来了,希望对大家有用. 本文不是初级教程,针对的读者是那些已经具备jQuery使用经验的开发者.如果你想了解jQuery的基本用法,请阅读我编写的<jQuery设计思想>和<jQuery最佳实践>. 一.什么是deferred对象? 开发网站的过程中,

随机推荐