美文网首页
手写简易Promise

手写简易Promise

作者: 小悟空大仙人 | 来源:发表于2019-11-29 15:09 被阅读0次

promise的用法

new Promise(
  function (resolve, reject) {
    // 一段耗时的异步操作
    resolve('成功') // 数据处理完成
    // reject('失败') // 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)

手写promise需要注意的地方
1)接受一个函数(后文称为executor函数)作为参数,executor函数又接收两个参数resolvereject
2)promise三种状态 pending 等待;resolve 成功;reject 失败
3)resolve表示成功的回调,reject表示失败的回调,这是promise的构造方法
4)then方法是promise原型方法。
5)executor函数是立即执行函数,即promise接收参数
6)promise状态不可逆,所以只有在pending状态下才能有异步完成的返回值
7)then方法接收两个函数作为参数,分别代表onfilfilled(成功)和onrejected(失败)

const PENDING = 'pending';
const RESOLVE = 'resolve';
const REJECT = 'reject';
class Promise {
    constructor(executor){
        this.status = PENDING;
        this.value = undefined; //成功返回
        this.reason = undefined; //失败返回
        let resolve = (value) =>{
        //promise对象状态不可逆,所以只有在pending
            if(this.status == PENDING){
                this.status = RESOLVE
                this.value = value
            }
        }
        let reject = (reason) => {
            if(this.status == PENDING){
                this.status = REJECT
                this.reason = reason
            }
        }
        //函数执行发生未知错误直接返回reject
        try{
            executor(resolve,reject) //立即执行函数 即promise接收参数
        }catch(e){
            reject(e)
        }
    }
    //接收两个函数作为参数,分别代表onfilfilled(成功)和onrejected(失败)
    then(onfilfilled,onrejected){
        if(this.status == RESOLVE){
            return onfilfilled(this.value)
        }else{
            return onrejected(this.reason)
        }
    }
}
module.exports = Promise

相关文章

  • 手写简易Promise

    promise的用法 手写promise需要注意的地方1)接受一个函数(后文称为executor函数)作为参数,e...

  • JS常见手写代码题(二)

    1、用闭包手写一个cache工具 2、手写一个简易的JQuery,考虑插件和扩展性 3、手写Promise加载一张...

  • 手写Promise

    手写 Promise 我们会通过手写一个符合 Promise/A+ 规范的 Promise 来深入理解它,并且手写...

  • 手写 Promise 系列 --- 3

    在前两篇(手写 Promise 系列 --- 1)和(手写 Promise 系列 ---2) 中,达成了3个目标 ...

  • 手写一个简易的Promise

    1. 简述 Promise 所谓 Promise,简单来说,就是一个容器,里面保存着某个未来才会结束的事件(通常是...

  • 手写Promise

    $ 正常的promise用法   $ 手写的Promise   # 测试可行性

  • 手写promise

    手写promise 带大家手写一个 promis。在手写之前我会先简单介绍一下为什么要使用promise、prom...

  • 纯手写实现自己的nodejs promise 库

    纯手写实现自己的nodejs promise 库什么是Promise?promise 链Async/Await后续...

  • 手写基础 promise

    1. 前言 玩下吧 手写 promise,看看能写成啥样 2. promise 基础结构 3. 手写`promi...

  • Promise的简易实现(1)

    Promise的简易实现(1) 1.Promise的日常使用 举个栗子: 2.做出Promise大致框架 代码的大...

网友评论

      本文标题:手写简易Promise

      本文链接:https://www.haomeiwen.com/subject/dbiwwctx.html