ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5.Promise值得穿透和静态方法的实现

2021-10-06 13:05:11  阅读:174  来源: 互联网

标签:resolve 静态方法 return value 穿透 Promise reject let


值得传递

then方法不调用参数,可以一直把参数往后传递

let p = new Promise((resolve, reject) => {
    resolve('sx')
})

p.then()
    .then()
    .then((value) => {
        console.log(value)  //sx
    }, (reason) => {
        console.log(reason)
    })

实现这个原理很简单,只需要在then方法的定义中做一层判断,如果没有传递参数,则构造一个参数,返回需要的数值给下一个Promise

 onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : v => v
 onRejected = typeof onRejected === 'function' ? onRejected : (err) => { throw err }

resolve和reject的实现

相当于调用Promise中的resolve和reject,可以使用then执行其结果

Promise.resolve(1).then(value => console.log(value)) //1

调用该静态方法,可以令其内部创建一个Promise,改变其状态返回即可

    static resolve (value) {
        return new Promise((resolve, reject) => {
            resolve(value)
        })
    }
    static reject (reason) {
        return new Promise((resolve, reject) => {
            reject(reason)
        })
    }

catch实现

值得穿透可以把错误信息放到最后处理,catch就是运用这个原理

   static catch (errfn) {
        return this.then(null, errfn)
    }

all方法的实现

  • 调用all,用户传进去一个数组,返回一个Promise
  • 创建一个Promise,在里面遍历数组的每一项,如果是Promise
    • 执行then,成功态将数据存入数组中
    • 失败则调用reject
  • 如果是普通值则直接加入数组中
static all (promises) {
        return new Promise((resolve, reject) => {
            let timer = 0;
            let result = []
            const processSuccess = function (index, data) {
                result[index] = data
                if (++timer === promises.length) {
                    resolve(result)
                }

            }
            for (let i = 0; i < promises.length; ++i) {
                let p = promises[i]
                //判断是否为promise
                if (p && typeof p.then === "function") {
                    p.then(value => {
                        processSuccess(i, value)
                    }, reject)
                }
                else {
                    processSuccess(i, p)
                }
            }
        })
    }

标签:resolve,静态方法,return,value,穿透,Promise,reject,let
来源: https://blog.csdn.net/wenyeqv/article/details/120622509

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有