博主信息
博文 91
粉丝 0
评论 0
访问量 99390
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Promise 基本方法的简单实现
编程三昧
原创
793人浏览过

Promise.001

前言

Promise 是前端面试和工作中极其常见的一个概念,关于它各种方法的手写实现也很有市场,今天在这里总结一下 Promise 基本方法的简单实现。

catch() 方法

catch 方法是对 then 方法的封装,只用于接收 reject(reason) 中的错误信息。

因为在 then 方法中 onRejected 参数是可不传的,不传的情况下,错误信息会依次往后传递,直到有 onRejected 函数接收为止,因此在写 promise 链式调用的时候, then 方法不传 onRejected 函数,只需要在最末尾加一个 catch() 就可以了,这样在该链条中的 promise 发生的错误都会被最后的 catch 捕获到。

catch(onRejected) {    return this.then(null, onRejected);}

done()  方法

catchpromise 链式调用的末尾调用,用于捕获链条中的错误信息,但是 catch 方法内部也可能出现错误,所以有些 promise 实现中增加了一个方法 done

done 相当于提供了一个不会出错的 catch 方法,并且不再返回一个 promise ,一般用来结束一个 promise 链。

done() {    this.catch(reason => {        console.log('done', reason);        throw reason;    });}

finally() 方法

finally 方法用于无论是 resolve 还是 rejectfinall y的参数函数都会被执行。

finally(fn) {    return this.then(value => {        fn();        return value;    }, reason => {        fn();        throw reason;    });};

Promise.all() 方法

Promise.all 方法接收一个 promise 数组,返回一个新 promise2 ,并发执行数组中的全部 promise ,所有 promise 状态都为 resolved 时, promise2 状态为 resolved 并返回全部 promise 结果,结果顺序和 promise 数组顺序一致。如果有一个 promiserejected 状态,则整个 promise2 进入 rejected 状态。

static all(promiseList) {    return new Promise((resolve, reject) => {        const result = [];        let i = 0;        for (const p of promiseList) {            p.then(value => {                result[i] = value;                if (result.length === promiseList.length) {                    resolve(result);                }            }, reject);            i++;        }    });}

Promise.race() 方法

Promise.race 方法接收一个 promise 数组, 返回一个新 promise2 ,顺序执行数组中的 promise ,有一个 promise 状态确定, promise2 状态即确定,并且同这个 promise 的状态一致。

static race(promiseList) {    return new Promise((resolve, reject) => {        for (const p of promiseList) {            p.then((value) => {                resolve(value);            }, reject);        }    });}

Promise.resolve() 和 Promise.reject()

Promise.resolve 用来生成一个 rejected 完成态的 promisePromise.reject 用来生成一个 rejected 失败态的 promise

static resolve(value) {    let promise;    promise = new Promise((resolve, reject) => {        this.resolvePromise(promise, value, resolve, reject);    });    return promise;}static reject(reason) {    return new Promise((resolve, reject) => {        reject(reason);    });}

总结

常用的方法基本就这些, Promise 还有很多扩展方法,这里就不一一展示,基本上都是对 then 方法的进一步封装,只要你的 then 方法没有问题,其他方法就都可以依赖 then 方法实现。

~

~ 本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学