中断执行
2023年06月17日
一、return
Promise
的状态可以通过以下三种方式变更:
-
resolve()
: 将Promise的Pending
状态置为Fulfilled
-
reject()
: 用于将Promise的Pending
状态置为Rejected
-
throw()
: 用于将Promise的Pending
状态置为Rejected
因此, 在 new Promise(()=>{ })
使用 return
可以中断后续程序的执行, 但是无法变更 Promise
的状态, Promise
的状态会一直处于 Pending
的状态。
语法
new Promise(resolve => {
return;
})
.then(() => {
console.log(1);
})
.then(() => {
console.log(2);
})
.then(() => {
console.log(3);
})
.then(() => {
console.log(4);
});
如上所示: Promise
一直处于 Pending
的状态。
二、resolve、reject
由 一
可知, resolve()
可以将Promise的Pending
状态置为Fulfilled
。reject()
用于将Promise的Pending
状态置为Rejected
。但是, resovle
和 reject
并不会中断 new Promise(()=>{})
回调内部后续的执行。
语法
new Promise(resolve => {
console.log('0.1');
resolve();
console.log('0.2');
})
.then(() => {
console.log(1);
})
.then(() => {
console.log(2);
})
.then(() => {
console.log(3);
})
.then(() => {
console.log(4);
});
三、throw new Error
由 一
可知, throw()
用于将Promise的Pending
状态置为Rejected
。 而且, throw
可以中断 new Promise(()=>{})
回调内部后续的执行。
语法
new Promise(resolve => {
console.log('0.1');
throw new Error('失败');
console.log('0.2');
})
.then(() => {
console.log(1);
})
.then(() => {
console.log(2);
})
.then(() => {
console.log(3);
})
.then(() => {
console.log(4);
})
.catch(error => {
console.log(error);
});
四、return resolve、return reject
一般来说,调用resolve
或reject
以后,Promise
的使命就完成了,后继操作应该放到then
方法里面,而不应该直接写在resolve
或reject
的后面。所以,最好在它们前面加上return
语句,这样就不会有意外。
new Promise(resolve => {
console.log('0.1');
return resolve();
console.log('0.2');
})
.then(() => {
console.log(1);
})
.then(() => {
console.log(2);
})
.then(() => {
console.log(3);
})
.then(() => {
console.log(4);
})
.catch(error => {
console.log(error);
});