当前仓库属于关闭状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 1 Fork 2

Rand / Promise
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Promise.js 2.94 KB
一键复制 编辑 原始数据 按行查看 历史
Rand 提交于 2017-04-20 10:48 . Promise A+ 的 ES5 实现
try{
if(Promise){}
}
catch (e){
window.Promise = function(fn) {
var state = "pending";
var callbacks = [];
var result = null;
function res_rej(a,b,c) {
if(state!=="pending"){
return;
}
if(b&&b["then"]&&typeof b["then"] === 'function'){
b["then"](resolve, reject);
return;
}
state = a;
result = b;
callbacks.forEach(function (obj) {
obj[c](result);
});
}
function resolve(value) {
res_rej("fulfilled",value,0);
}
function reject(reason) {
res_rej("rejected",reason,1);
}
this.then = function (onFulfilled,onRejected) {
return new Promise(function (resolve, reject) {
switch (state){
case "pending":
callbacks.push([
function () {
resolve(onFulfilled(result));
},
function () {
reject(onRejected(result));
}
]);
break;
case "fulfilled":
resolve(onFulfilled(result));
break;
case "rejected":
reject(onRejected(result));
break;
}
});
};
this.catch = function (onRejected) {
return this.then(null, onRejected);
};
fn(resolve,reject);
};
Promise.resolve = function (value) {
return new Promise(function(resolve) {
resolve(value);
});
};
Promise.reject = function (reason) {
return new Promise(function(resolve, reject) {
reject(reason);
});
};
Promise.all = function (promises) {
return new Promise(function(resolve, reject) {
var count = 0;
var values = [];
for (var i = 0; i < promises.length; i++) {
Promise.resolve(promises[i]).then(function(value) {
values.push(value);
if (count === promises.length-1) {
resolve(values);
}
else{
count++;
}
}, function(reason) {
reject(reason);
});
}
});
};
Promise.race = function (promises) {
return new Promise(function(resolve, reject) {
for (var i = 0; i < promises.length; i++) {
Promise.resolve(promises[i]).then(function(value) {
resolve(value);
}, function(reason) {
reject(reason);
})
}
});
};
}
JavaScript
1
https://gitee.com/oscxc/promise.git
git@gitee.com:oscxc/promise.git
oscxc
promise
Promise
master

搜索帮助