錯誤和承諾

Promise 以不同於同步或回撥驅動程式碼的方式處理錯誤。

const p = new Promise(function (resolve, reject) {
    reject(new Error('Oops'));
});

// anything that is `reject`ed inside a promise will be available through catch
// while a promise is rejected, `.then` will not be called
p
    .then(() => {
        console.log("won't be called");
    })
    .catch(e => {
        console.log(e.message); // output: Oops
    })
    // once the error is caught, execution flow resumes
    .then(() => {
        console.log('hello!'); // output: hello!
    });

目前,未捕獲的承諾中丟擲的錯誤會導致吞下錯誤,這可能導致難以追蹤錯誤。這可以使用像 eslint 這樣的 linting 工具來解決, 或者確保你總是有一個 catch 子句。

在節點 8 中不推薦使用此行為 以支援終止節點程序。