JavaScript中Promise的reject

原文:Reject a Promise in JavaScript

在Promise中出现了错误,可以用reject将其标记为rejected状态。

Promise.reject()函数以最简明的方式,将发生已知错误的Promise标记为rejected。在这之后还应该用.catch()处理错误。

1
2
3
4
5
const p = Promise.reject(new Error('Oops!'));

return p.catch(err => {
err.message; // 'Oops!'
});

Promise构造器

当你使用new创建一个Promise时,其实是调用了Promise的构造器。Promise的构造器只接收一个参数——executor函数,Promise随后会执行executor函数,并传入2个参数:resolve()reject()

1
2
3
4
5
6
function executor(resolve, reject) {
typeof resolve; // 'function'
typeof reject; // 'function'
}

new Promise(executor);

在executor函数中,要将Promise标记为rejected,可以调用reject(),并传入Error对象

1
2
3
4
5
6
7
const p = new Promise((resolve, reject) => {
reject(new Error('Oops!'));
});

return p.catch(err => {
err.message; // 'Oops!'
});

reject非Error值

reject并非只支持Error对象,也可以reject其他任意值。

1
2
3
4
5
const p = Promise.reject(42);

return p.catch(err => {
err; // 42
});

但是,许多库和框架假定Promise总是reject一个错误对象,所以在调用Promise.reject()传入其他值的时候,要特别小心。

async/await是JavaScript中并发的未来趋势。“Mastering Async/Await”教你如何在几个小时内,用async/await构建前后端APP,来看看吧!