首页 > 作文

手写Promise

更新时间:2023-04-07 12:18:57 阅读: 评论:0

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图