Waiter.js
2024-08-27 00:29:02
var Waiter = function() {
var dfd = [],
doneArr = [],
failArr = [],
slice = Array.prototype.slice,
that = this;
var Primise = function() {
this.resolved = false;
this.rejected = false;
}
Primise.prototype = {
resolve: function() { this.resolved = true;
if (!dfd.length) {
return;
}
for (var i = dfd.length - 1; i >= 0; i--) {
if (dfd[i] && !dfd[i].resolved || dfd[i].rejected) {
return;
}
dfd.splice(i, 1);
}
_exec(doneArr);
},
reject: function() {
this.rejected = true;
if (!dfd.length) {
return;
}
dfd.splice(0);
_exec(failArr);
}
}
that.Deferred = function() {
return new Primise();
} function _exec(arr) {
var i = 0,
len = arr.length;
for (; i < len; i++) {
try {
arr[i] && arr[i]();
} catch (e) {}
}
};
that.when = function() { dfd = slice.call(arguments);
var i = dfd.length;
for (--i; i >= 0; i--) {
if (!dfd[i] || dfd[i].resolved || dfd[i].rejected || !dfd[i] instanceof Primise) {
dfd.splice(i, 1);
}
}
return that;
};
that.done = function() { doneArr = doneArr.concat(slice.call(arguments));
return that;
};
that.fail = function() {
failArr = failArr.concat(slice.call(arguments));
return that;
};
}; var waiter = new Waiter(); var first = function() {
var dtd = waiter.Deferred();
setTimeout(function() {
console.log('first finish');
dtd.resolve();
}, 5000);
return dtd;
}(); var second = function() {
var dtd = waiter.Deferred();
setTimeout(function() {
console.log('second finish');
dtd.resolve();
}, 0);
return dtd;
}(); waiter.when(first, second).done(function() {
console.log('first success');
}, function() {
console.log('second success');
}).fail(function() {
console.log('fail');
})
最新文章
- C++ map的基本操作和使用
- MAC解决端口占用
- logback 常用配置详解(二) <;appender>;
- 51nod 1076强连通
- WebService核心之WSDL深入详解
- 教你安装漂亮的Arc GTK主题
- 在JSP页面显示九九乘法表
- VS 2010 编译安装 boost 库 -(和 jsoncpp 库共存)
- 【BZOJ 1563】 [NOI2009]诗人小G
- JavaScript学习笔记--ES6学习(五) 数值的扩展
- POJ2240 Arbitrage(最短路)
- poj 3237 Tree(树链拆分)
- Spring学习---JPA学习笔记
- Cookie 进阶
- Android 4.1.2系统添加重启功能
- Tiny4412模式跳转
- linux如何查看所有的用户和组信息?
- [UE4]AttachToComponent的AttachmentRule
- JAVA性能优化:35个小细节让你提升java代码的运行效率
- 洛谷P3952 时间复杂度【字符串】【模拟】
热门文章
- win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)
- AspNetCore使用MySQL
- 行人重识别(ReID) ——基于深度学习的行人重识别研究综述
- (转)Centos7下杀毒软件clamav的安装和使用
- ARM Linux BenchMark
- Arrays基本使用
- 00.斐波那契数列第n项
- pycharm安装第三方库失败module &#39;pip&#39; has no attribute &#39;main&#39;
- 批处理bat文件显示中文乱码解决方式
- SPFA的两个优化