博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pormise
阅读量:6293 次
发布时间:2019-06-22

本文共 4442 字,大约阅读时间需要 14 分钟。

//Pormise function MyPromise (executor) {
var self = this self.status = 'pending' self.resolveValue = null self.rejectValue = null self.resolveCallbackList = [] //用来存储resolve的回调函数 self.rejectCallbackList = [] //用来存储reject的回调函数 function resolve (value) {
if (self.status === 'pending') {
self.status = 'Fulfilled' self.resolveValue = value self.resolveCallbackList.forEach(function (item) {
item() }) } } function reject (value) {
if(self.status === 'pending') {
self.status = 'Rejected' self.rejectValue = value self.rejectCallbackList.forEach(function (item) {
item() }) } } try {
executor(resolve, reject) } catch (e) {
reject(e) } } function resultIsPromise (nextValue, res, rej) {
if(nextValue instanceof MyPromise) {
nextValue.then(function (val) {
res(val) }, function(reason) {
rej(reason) }) } else {
res(nextValue) } } MyPromise.prototype.then = function (resolve, reject) {
if (!resolve) {
resolve = function(val) {
return val } } if (!reject) {
reject = function (val) {
throw new Error(val) } } var self = this var nextPromise = new MyPromise(function(res, rej) {
setTimeout(function() {
if (self.status === 'Fulfilled') {
try{
// var newResolveVal = resolve(self.resolveValue) // res(newResolveVal) var newResolveVal = resolve(self.resolveValue) resultIsPromise(newResolveVal, res, rej) } catch(e) {
rej(e) } } }, 0) setTimeout(function () {
if (self.status === 'Rejected') {
try{
var newRejectVal = reject(self.rejectValue) resultIsPromise(newRejectVal, res, rej) } catch(e) {
rej(e) } } }, 0) if (self.status === 'pending') {
if(typeof resolve === 'function') {
self.resolveCallbackList.push(function () {
setTimeout(function() {
try{
var newResolveVal = resolve(self.resolveValue) resultIsPromise(newResolveVal, res, rej) } catch (e) {
rej(e) } }) }) } if(typeof reject === 'function') {
setTimeout(function () {
self.rejectCallbackList.push(function () {
try{
var newRejectVal = reject(self.rejectValue) resultIsPromise(newRejectVal, res, rej) } catch(e) {
rej(e) } }) }, 0) } } }) return nextPromise } //race
MyPromise.race = function (promises) {
return new MyPromise(function (res, rej) {
promises.forEach( function (item) {
item.then(res, rej) }) }) }
MyPromise.resolve = function (val) {
return new MyPromise(function (resolve) {
resolve(val) }) } MyPromise.catch = function (val) {
return new MyPromise(function (undefined,reject) {
reject(val) }) } MyPromise.all = function (promises) {
return new MyPromise(function(resolve, reject){
var countNum=0; var promiseNum=promises.length; var resolvedValue=[]; for(var i=0;i
 
 

 

转载于:https://www.cnblogs.com/CoderZX/p/10792216.html

你可能感兴趣的文章
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>
初探Angular6.x---进入用户编辑模块
查看>>