JavaScript Promise:Reject 與Throw 之謎
使用JavaScript Promise 時,開發人員經常面臨一個困境:他們是否應該使用Promise . reject 或者只是拋出一個錯誤?雖然這兩種方法具有相似的目的,但關於它們的差異和潛在優勢仍然存在混淆。
探索相似之處
最終,使用 Promise.reject 沒有固有的優勢過度拋出錯誤,反之亦然。兩種機制都將 Promise 設定為拒絕狀態並觸發 .catch 或 catch() 處理程序的執行。
揭示了微妙的區別
但是,具體情況存在拋出錯誤不足的地方:承諾回調之外的非同步回調。在這些情況下,Promise.reject 是讓 Promise 鏈知道拒絕狀態的唯一選項。
考慮以下範例:
new Promise(function() {
setTimeout(function() {
throw 'or nah';
// Using Promise.reject('or nah') also won't work in this case
}, 1000);
}).catch(function(e) {
console.log(e); // doesn't happen
});
在這種情況下,setTimeout 回調中拋出的錯誤不會被 .catch 處理程序捕獲,因為它不是在 Promise 回調中執行。為了有效地處理這種情況,必須在非同步回調中使用 Promise.reject。
選擇最佳實踐
一般來說,要么 Promise.reject 要么拋出錯誤可用於將承諾設置為拒絕狀態。然而,當在 Promise 回呼之外使用非同步回呼時,Promise.reject 成為唯一可行的選擇。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3