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的实现的更多相关文章

  1. 对于ES6中Promise的个人见解

    1.js中常见的异步 JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作. let button = document.getElementById("btn&quo ...

  2. ES6中Promise对象个人理解

    Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ...

  3. ES6中promise的使用方法

    先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...

  4. ES6 中 Promise

    在说Promise之前我们先简单说一下什么是同步异步? 同步(Sync):所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 异步(Async):异步与同步相对, ...

  5. ES6中promise总结

    一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...

  6. ES6 中 Promise 详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...

  7. ES6中Promise详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...

  8. ES6中Promise的入门(结合例子)

    一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ...

  9. 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出

    1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) { if (success){ ...

随机推荐

  1. Go 初体验 - 闭包,数组,切片,锁

    我们先假设一个需求,创建一个数组,里面存放 0 - 99 的整数. 上代码: 输出: 然而并不是我们想要的结果,很多重复数值. 释义: 12行这个闭包函数对 i 的传递并非深拷贝,而是传递了变量指针, ...

  2. SRD_PreloaderCore

    预加载 Preloader CoreVersion 1.10SumRndmDde This plugin requires the Game Upgrade plugin:http://sumrndm ...

  3. Python魔法方法详解

      魔法方法 含义   基本的魔法方法 __new__(cls[, ...]) 1.__new__是在一个对象实例化的时候所调用的第一个方法 2.它的第一个参数是这个类,其他的参数是用来直接传递给__ ...

  4. Fiddler使用教程(转)

    Fiddler是最强大最好用的Web调试工具之一,你对HTTP协议越了解, 你就能越掌握Fiddler的使用方法.你越使用Fiddler,就越能帮助你了解HTTP协议.Fiddler无论对开发人员或者 ...

  5. Spring Boot 2.x中的management.security.enabled=false无效问题

    look: https://blog.csdn.net/qq_27385301/article/details/82899303

  6. rabbitMq交换机direct、topics

    一: direct 上面我用采用了广播的模式进行消息的发送,现在我们采用路由的方式对不同的消息进行过滤 发送端代码 public class RoutingSendDirect { private s ...

  7. Linux中LAMP构架的实现

    LAMP:Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度共同组 ...

  8. jmeter java requst请求

    https://wangym.iteye.com/blog/731729 http://www.cnblogs.com/yangxia-test/p/4019541.html https://blog ...

  9. appium+python3+pycharm踩得坑2

    没相当刚把上一个错误解决,这个马上就解决了: selenium.common.exceptions.WebDriverException: Message: A new session could n ...

  10. python基础_格式化输出(%用法和format用法)

      目录 %用法 format用法 %用法 1.整数的输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 1 >>> print('%o' % 2 ...