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
相关推荐
-
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对象? 开发网站的过程中,
随机推荐
- jQueryUI Sortable 应用Demo(分享)
- JS小框架 fly javascript framework
- javascript正则表达式模糊匹配IP地址功能示例
- VirtualBox简体中文版下载安装(图解教程)
- PHP 如何利用phpexcel导入数据库
- php 将excel导入mysql
- 怎么用C++提取任意一张图片的特征(从内存读取数据)
- Android系统中使用shareuserid获取系统权限的教程
- ThinkPHP连接Oracle数据库
- php实现获取文件mime类型的方法
- 定时导出mysql本地数据替换远程数据库数据脚本分享
- Android基于Xposed修改微信运动步数实例
- Javascript实现一个简单的输入关键字添加标签效果实例
- 用javascript实现“闪动”标题栏
- Java中HashMap和Hashtable的区别浅析
- JS实现控制表格只显示行边框或者只显示列边框的方法
- C#通过重写Panel改变边框颜色与宽度的方法
- C#检测远程计算机端口是否打开的方法
- SpringCloud 中使用 Ribbon的方法详解
- Android Jni的简单使用详解