es6中promise ALL Race Resolve Reject finish的实现
function mypromise(func){
this.statue = "pending";
this.data = null;
this.resolveCallback = [];
this.rejectCallback = [];
this._final = null;
var self = this;
var resolve = function(data){
if (data instanceof mypromise) {
data.then(resolve,reject)
return;
}
setTimeout(function(){
if(self.statue != "pending") return;
self.data = data;
self.statue = "resolve";
for(var i = 0; i < self.resolveCallback.length; i++){
var item = self.resolveCallback[i];
item.bind(self)(data)
}
},0)
}
var reject = function(data){
setTimeout(function(){
if(self.statue != "pending") return;
self.data = data;
self.statue = "reject";
for(var i = 0; i < self.rejectCallback.length; i++){
var item = self.rejectCallback[i];
item.bind(self)(data)
}
},0)
}
try {
if (typeof func == 'function'){
func.bind(this)(resolve,reject);
}else{
if(func == 'reject'){
this.statue = "reject";
reject();
}else{
this.statue = "resolve";
resolve();
}
}
} catch (e) {
reject(e)
}
}
mypromise.prototype.then = function(onresolve,onreject){
var self = this;
onresolve = typeof onresolve === 'function' ? onresolve : function(data){return data;}
onreject = typeof onreject === 'function' ? onreject : function(data){return data;}
if(self.statue == "pending"){
return new mypromise(function(resolve,reject){
var _this = this;
self.resolveCallback.push(function(data){
var x = onresolve(data);
if(x instanceof mypromise){
x.then(resolve,reject)
}else{
resolve(x)
}
typeof _this._final == 'function' ? _this._final() : null;
})
self.rejectCallback.push(function(data){
var x = onreject(data);
if(x instanceof mypromise){
x.then(resolve,reject)
}else{
reject(x)
}
typeof _this._final == 'function' ? _this._final() : null;
})
});
}
if(self.statue == "resolve"){
return new mypromise(function(resolve,reject){
var x = onresolve(self.data);
if(x instanceof mypromise){
x.then(resolve,reject)
}else {
resolve(x);
}
typeof this._final == 'function' ? this._final() : null;
});
}
if(self.statue == "reject"){
return new mypromise(function(resolve,reject){
var x = onreject(self.data);
if(x instanceof mypromise){
x.then(resolve,reject)
}else {
reject(x);
}
typeof this._final == 'function' ? this._final() : null;
});
}
}
mypromise.prototype.catch = function(reject){
return this.then(null,reject);
}
mypromise.All = function(){
var allArguments = arguments;
var len = allArguments.length,
item = null,
successResult = [],
failResult = []
resultData = [];
return new mypromise(function(resolve,reject){
function resolver(index){
return function(data){
successResult.push(1);
resolveAll(index,data);
}
}
function rejecter(index){
return function(data){
failResult.push(1);
resolveAll(index,data);
}
}
function resolveAll(index,data){
resultData.push({index:index,data:data})
if(successResult.length + failResult.length == len){
if( successResult.length == len){
resolve(resultData)
}else{
reject(data)
}
}
}
for(var i = 0; i < len; i++){
item = allArguments[i];
if(!(item instanceof mypromise)){
throw new TypeError("you must pass promise to mypromise.all")
}
item.then(resolver(i),rejecter(i))
}
})
}
mypromise.Race = function(){
var allArguments = arguments;
var len = allArguments.length,
item = null,
successResult = [],
failResult = [];
return new mypromise(function(resolve,reject){
function resolver(data){
successResult.push(1);
resolveAll(data);
}
function rejecter(data){
failResult.push(1);
reject(data);
}
function resolveAll(data){
resolve(data)
}
for(var i = 0; i < len; i++){
item = allArguments[i];
if(!(item instanceof mypromise)){
throw new TypeError("you must pass promise to mypromise.all")
}
item.then(resolver,rejecter)
}
})
}
mypromise.Resolve = function(func){
if(func instanceof mypromise){
return func;
}else{
return new mypromise('resolve');
}
}
mypromise.Reject = function(func){
return new mypromise('reject');
}
mypromise.prototype.Final = function(onresolve){
this._final = onresolve;
}
es6中promise ALL Race Resolve Reject finish的实现的更多相关文章
- 对于ES6中Promise的个人见解
1.js中常见的异步 JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作. let button = document.getElementById("btn&quo ...
- ES6中Promise对象个人理解
Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ...
- ES6中promise的使用方法
先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...
- ES6 中 Promise
在说Promise之前我们先简单说一下什么是同步异步? 同步(Sync):所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 异步(Async):异步与同步相对, ...
- ES6中promise总结
一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...
- ES6 中 Promise 详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...
- ES6中Promise详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...
- ES6中Promise的入门(结合例子)
一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ...
- 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出
1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) { if (success){ ...
随机推荐
- (.NET高级课程笔记)Lambd、Linq总结
知识总结 1.委托简介:委托是一种类型,可以写在类里,也可以写在类外面,级别和类一样高. 2.匿名方法.匿名类 3.Lambda表达式:goes to 4.系统自带委托:Func/Action 5.扩 ...
- nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)
在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\te ...
- java中String字符串的==解析
今天不知道怎么看了下string的==的问题,本身我觉得我这个水平去判断几个字符串相等还能出问题?呵呵,真的出了大问题,根本原因在于对java字节码的不了解. 首先,==运算符比较的是两个变量所指向的 ...
- Mysql AVG() 值 返回NULL而非空结果集
[1]select 查询返回一行NULL 先来模拟复现一下遇到的问题. (1)源数据表grades,学生成绩表 (2)查询SQL语句 查询‘080601’班的各门课平均成绩 SELECT sClass ...
- 《AI算法工程师手册》
本文转载自:http://www.huaxiaozhuan.com/ 这是一份机器学习算法和技能的学习手册,可以作为学习工作的参考,都看一遍应该能收获满满吧. 作者华校专,曾任阿里巴巴资深算法工程师, ...
- 认识volatile的工作原理
前言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”.可见性的意思是当 ...
- self study 权限 permission
demo 测试成功, import 'package:permission/permission.dart'; Future requirePermission()async { await Perm ...
- Yii1操作phpexcel
Yii::import('application.vendors.phpexcel.*'); Yii::import('application.vendors.phpexcel.PHPExcel.*' ...
- python操作字符串类型json的注意点
python操作json的方法有json.dumps——将json对象(字典)转换为字符串对象json.loads——将字符串对象转换为json对象(字典)如果定义json对象jsonstring1= ...
- Getting Started with Word2Vec
Getting Started with Word2Vec 1. Source by Google Project with Code: https://code.google.com/archive ...