跳到主要内容

中断执行

2023年06月17日
柏拉文
越努力,越幸运

一、return


Promise 的状态可以通过以下三种方式变更:

  • resolve(): 将PromisePending状态置为Fulfilled

  • reject(): 用于将PromisePending状态置为Rejected

  • throw(): 用于将PromisePending状态置为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() 可以将PromisePending状态置为Fulfilledreject() 用于将PromisePending状态置为Rejected。但是, resovlereject 并不会中断 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() 用于将PromisePending状态置为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


一般来说,调用resolvereject以后,Promise 的使命就完成了,后继操作应该放到then方法里面,而不应该直接写在resolvereject的后面。所以,最好在它们前面加上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);
});