簡體   English   中英

JavaScript中的承諾是否像Java中的異常處理一樣?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM