與承諾的互動

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