[英]Are Promises in JavaScript like Exception Handling in Java?
就像Java中的try(),catch()和throw()作為異常處理一樣,JavaScript中的then()和catch()作為承諾! 只是一個初學者問一些問題。 請不要判斷。 xD
在JavaScript中,我們也有try / catch塊。
JavaScript中Promises的主要好處是諸如Chaining之類的東西。
Java中的Promises等效於CompletableFuture 。 閱讀 :)
不,它們完全不同。 異常處理處理異常。 承諾是一種在異步環境(JavaScript是)中返回值並對其執行操作的方法。
假設您要自定義JS確認框。 您可以設置一個jQuery對話框,並根據用戶單擊哪個按鈕返回是或否。 像這樣:
function msgBoxConfirm(msgText, e) {
e.preventDefault(); // Cancel the default behavior
e.stopPropagation(); // Stop any other events from firing down the line
$('#myDialogDiv').html(msgText).dialog({
modal: true,
title: boxTitle,
buttons: {
'Yes': function() {
$(this).dialog('close');
return true;
},
'No': function() {
$(this).dialog('close');
return false;
}
}
});
}
現在,您調用消息框函數:
var retval = msgBoxConfirm('Do you really want to do that?', e);
if (!retval) {
//Do the no behavior
} else {
//Do the yes behavior
}
您會發現,此代碼將在找到retval
的值之前繼續執行,因此當您使用if
對其求值時, retval
的值將為undefined
。 這就是異步的含義。 對函數的調用不會等到函數執行完畢后再繼續運行,從而可能導致各種不良行為。
承諾是一種等待直到返回值之后再檢查它的方法。 要了解如何使用Promise正確設置此示例,請參見this 。
try/catch
檢測錯誤本身並轉移控制以捕獲部分。 這個語法也存在於js
。
但是在then/catch
,您必須自己通知發生錯誤(通過調用reject
)。 這意味着您可以在發現error
時通知error
。 該錯誤可以是真實錯誤,也可以不是真實錯誤 (編程/邏輯錯誤)。
承諾和異常處理是不同的,它們是不同的。 在javascript中,promise讓我們可以使用。 然后知道函數何時完成執行,有助於了解異步函數何時完成執行,並且javascript還提供了對java的try / catch支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.