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
- 执行
resove - 执行
console.log reject不执行,所以之后的catch回调也不执行。- 执行
return,之后的语句都不执行了。
promise 的参数就是一个回调函数
示例2
then 语句是需要 promise 状态变为 fulfilled 之后执行,是异步方法。then 方法的参数(回调函数)属于微任务。
new Promise((resolve, reject) => {
resolve(0);
console.log(1);
}).then((data) => {
console.log(data);
});
// 1 0