promise中的resolve, reject与return的区别

722 阅读1分钟

resolve 与 reject

reject执行完之后,resolve还会执行吗?后面的语句还会执行吗?

new Promise((resolve, reject) => {
    resolve(2);
    console.log(1);
    reject(3);
    console.log(4);
}).then((data) => {
    console.log(data);
}).catch((data) => {
    console.log(data);
})

// 1 4 2

Notice:

resolve 和 reject 互斥,只执行一次。为什么呢?

promise对象只有三种状态pending、fulfilled、rejected。一旦由pending转为fulfilled/rejected,就不能再修改了。所以resolve之后,变为fulfilled之后,reject不会再执行了。与return没有半毛钱关系。

return 与 resolve、reject

return在这里与其他地方没有任何区别,其后的语句不会执行。return的是5,不是promise对象,所以.then接收不到数据。

new Promise((resolve, reject) => {
    return 5;
    resolve(2);
    console.log(1);
    reject(3);
    console.log(4);
}).then((data) => {
    console.log(data);
}).catch((data) => {
    console.log(data);
})

// 什么都不会打印

示例1

new Promise((resolve, reject) => {
    resolve(2);
    console.log(1);
    reject(3);
    return 5;
    console.log(4);
}).then((data) => {
    console.log(data);
}).catch((data) => {
    console.log(data);
})

// 1 2
  1. 执行 resove
  2. 执行 console.log
  3. reject 不执行,所以之后的 catch 回调也不执行。
  4. 执行 return,之后的语句都不执行了。

promise 的参数就是一个回调函数

示例2

then 语句是需要 promise 状态变为 fulfilled 之后执行,是异步方法。then 方法的参数(回调函数)属于微任务。

new Promise((resolve, reject) => {
    resolve(0);
    console.log(1);
}).then((data) => {
    console.log(data);
});

// 1 0