目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx git docker esp32 windows idea maven esp8266 Arduino 硬件资料

存档:

X

对Promise中的resolve,reject,catch的理解

.then()的时候到底是在then什么…
首先要理解…Promise是一个对象,有then()方法的对象
then()的入参是一个函数,通常在promise链中,入参是 一个返回promise的函数 ,这句话好像有点拗口,就是说入参是一个函数,这个函数会return一个promise对象。

如何破坏promise链

如果有这样一个promise链:

p1().then(p2).then(p3)
  .then((data) => {
    console.log('data: ' + data);
  })
  .catch((error) => {
    console.log('error: ' + error);
  });
 
function p1() {
  let p1 = new Promise((resolve, reject) => {
    console.log('p1 resolved');
    resolve(123);
  });
  return p1;
}
 
function p2() {
  let p2 = new Promise((resolve, reject) => {
    console.log('p2 rejected');
    reject(456);
  });
  return p2;
}
 
function p3() {
  let p3 = new Promise((resolve, reject) => {
    console.log('p3 resolved');
    resolve(789);
  });
  return p3;
}

上面这个例子,你看到的console.log会是这样:

p1 resolved
p2 rejected
error: 456

并没有看到 p3 的log,而是看到了error message,也就是说:
在一个promise链中,只要任何一个promise被reject,promise链就被破坏了,reject之后的promise都不会再执行,而是直接调用.catch方法,通过 .catch 能够清楚的判断出promise链在哪个环节出了问题。

//注意
let p = new Promise((resolve, reject) => {
    let result = 123;
    reject(result);
})
// 只会被第一种方式reject操作失败的结果
p.then((result)=>{ 
    console.log('success:',result);
}, (result)=>{ 
    console.log('fail:',result);
}).then(() => {
    console.log(456);
}).catch((result)=>{ 
    console.log('error:',result);
})
//输出结果
// "fail: 123"
// "456"

非Promise链中reject不会影响后面.then()的执行,并且如果reject和catch两种方式同时使用的话,只会被第一种方式reject操作失败的结果。

我也不知道写了什么。。


标题:对Promise中的resolve,reject,catch的理解
作者:llilei
地址:http://solo.llilei.work/articles/2021/10/20/1634694855123.html