Promise | catch、finally 方法实现(代码版)

6,892 阅读2分钟

文 / 景朝霞

来源公号 / 朝霞的光影笔记

ID / zhaoxiajingjing

❥❥❥❥点个赞,让我知道你来过~❥❥❥❥


Promise 的方法

经过手写 Promise 的原理后,再来理解 Promise 的方法,会更加容易了。

好啦,我们直接上代码~

catch 方法

  • 使用

catch 方法是 then 方法的语法糖,只接受 rejected 态的数据。

1let p = new Promise((resolve, reject) => {
2    reject('爱上你是我的错o(╥﹏╥)o');
3});
4
5p.then(data => {
6    console.log(data, 'data');
7}).catch(err => {
8    console.log(err, 'err');
9});
  • 实现

catch 就是 then 方法的语法糖,直接调用即可~

1Promise.prototype.catch = function(callback){
2    return this.then(null, callback);
3};

finally 方法

  • 使用

finally 方法,无论如何都会走到这里来的。

在 finally 方法里面,不接受成功态或失败态的数据,走一个过场,直接值穿透到下一个里面去。

适合把一些,成功态或失败态都有的逻辑放在这里面。

 1let p = new Promise((resolve, reject) => {
2    reject('爱上你是我的错o(╥﹏╥)o');
3});
4
5p.then(data => {
6    console.log(data, 'data');
7}).finally(data => {
8    console.log(data, 'finally');
9}).catch(err => {
10    console.log(err, 'err');
11});
  • 实现
  1. finally 方法里面,值只是在这里走个过场
  2. 如果 callback 里面是一个Promise,那么需要等着他的结果。
 1Promise.resolve = function (value){
2    return new Promise((resolve, reject) => {
3        resolve(value);
4    });
5};
6Promise.prototype.finally = function (callback){
7    return this.then(data => {
8        return Promise.resolve(callback()).then(() => data);
9    }, err => {
10        return Promise.resolve(callback()).then(() => {throw err});
11    });
12};

文章首发,ID:zhaoxaijingjing