與承諾的互動
Version >= 6
例外情況是同步程式碼拒絕基於承諾的非同步程式碼。如果在 promise 處理程式中丟擲異常,則會自動捕獲其錯誤並用於拒絕 promise。
Promise.resolve(5)
.then(result => {
throw new Error("I don't like five");
})
.then(result => {
console.info("Promise resolved: " + result);
})
.catch(error => {
console.error("Promise rejected: " + error);
});
Promise rejected: Error: I don't like five
Version > 7
非同步函式提案在相反方向 -expected 是 ECMAScript 的一部分 2017-延伸此。如果你等待被拒絕的承諾,則會將其錯誤引發為異常:
async function main() {
try {
await Promise.reject(new Error("Invalid something"));
} catch (error) {
console.log("Caught error: " + error);
}
}
main();
Caught error: Invalid something