發布日期:2025 年 1 月 17 日
在網路上執行非同步工作可能會很困難,而且網路上執行的許多工作都涉及非同步作業。無論是 fetch
呼叫或其他非同步作業,只要瀏覽器內建方法提供完善的錯誤處理機制,您就能輕鬆完成這項工作。這項功能已透過 then
、catch
和 finally
方法,為 Promise 提供。
即便如此,您建構應用程式程式碼集的方式仍應具備彈性,而且您在應用程式中執行的所有操作不一定都是非同步作業。有時您可能會希望以更簡單的方式處理回呼結果,而無須考量傳遞至 Promise
的回呼是否為同步回呼。Promise.try
是目前所有主要瀏覽器引擎都支援的方法,可為開發人員簡化這項作業,因此現在已納入 Baseline。
Promise.try
是什麼?運作方式為何?
Promise.try
是方便方法,可讓您更輕鬆地處理同步回呼函式的錯誤,比起使用 Promise.resolve
更為簡單:
// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());
// But it will be here:
Promise.try(callback);
接著,請使用 then
、catch
和 finally
方法,處理 Promise
的解析或拒絕:
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
如果回呼函式含有引數,該怎麼辦?您可以選擇使用以下其中一種方法:
// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));
// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);
使用 Promise.try
的主要好處是,無論您傳遞的回呼是否為同步或非同步,您都可以一致地使用 Promise。也就是說,如果公用程式函式會將回呼傳遞至程式碼中廣泛使用的 Promise
,使用 Promise.try
可確保您傳遞至該函式的任何回呼都能妥善處理錯誤。如需更多資訊和其他潛在疑慮或用途,請參閱 Promise.try
的 MDN 說明文件。
結論
Promise.try
已達到新基準,因此您應該可以在所有主要瀏覽器引擎中使用。隨著時間過去,您應該會越來越有信心在網頁應用程式中使用 Promise.try
,因為 Promise.try
將成為穩定且可互通的網頁平台元件。