1. 无链式then
// 先定义三个常量表示状态var PENDING = 'pending';var FULFILLED = 'fulfilled';var REJECTED = 'rejected';function MyPromi(fn) {this.status = PENDING; // 初始状态为pendingthis.v张宁海alue = null; // 初始化valuethis.err = null; // 初始化errthis.onFulfilledCallbacks = [] // Fulfilled回调数组this.onRejecte办公游戏笔记本dCallbacks = [] // Rejected回调数组// console.log(fn)// 存一下this,以便resolve和reject里面访问var that = this;// resolve方法参数是valuefunction resolve(value) {if(that.status === PENDING) {that.status = FULFILLED;that.value = value;// 执行从PENDING到Fulfill的方法,如果MyPromi里没有异步任务,同步resolve,这里应该是空的that.onFulfilledCallbacks.forEach(cb => {cb(value)})}}// reject方法参数是errfunction reject(err) {if(that.status === PENDING) {that.status = REJECTED;that.err = err;// 执行从PENDING到Reject的方法that.onRejectedCallbacks.forEach(cb => {cb(err)})}}try {fn(resolve, reject);/*(function(resolve,reject)=>{tTimeout(()=>{resolve('hello')},250考研英语作文万能模板0)})(resolve,reject);*/} catch (error) { reject(error);}}// two params of function thenMyPromi.prototype.then = function(onFulfilled,onReject){ //没有then链式调用 // 状态改变 执行相应回调 // 能直接调用回调的两种情况,说明Promi构造时resolve没有异步执行 if(this.status === FULFILLED) { onFulfilled(this.value) } if(this.status === REJECTED) { onRejected(this.err); } // 如果还是PENDING状态,说明Promi构造在异步执行,还没resolve/reject,所以先将回调保存下来 if(this.status === PENDING) { this.onFulfilledCallbacks.push(onFulfilled); this.onRejectedCallbacks.push(onReject); } }let p = new MyPromi((resolve,reject)=>{// resolve如何申请出国留学('hello')// 异步resolvetTimeout(()=>{resolve('hello')},1000)})p.then(res=>{console.log(res);})
本文民兵工作条例地址:https://blog.csdn.net/qq_38765789/article/details/107388727
本文发布于:2023-04-07 12:18:55,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b0af30bef436caf34a89096220cb1e4d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:手写Promise.doc
本文 PDF 下载地址:手写Promise.pdf
留言与评论(共有 0 条评论) |