【问题标题】:Are Promises in JavaScript like Exception Handling in Java?JavaScript 中的 Promise 是否类似于 Java 中的异常处理?
【发布时间】:2018-08-26 05:37:03
【问题描述】:

就像Java中的try()、catch()和throw()作为异常处理一样,就像JavaScript中的then()和catch()作为promise一样!? 只是一个初学者问一些问题。请不要判断。 xD

【问题讨论】:

  • 简短的回答是不,不是真的。长答案是,它们更像 Java 中的Futures。某些进程执行并“承诺”返回结果或触发器和错误,这些可以在稍后阶段处理。承诺“传递”错误这一事实并不一定使它们与try-catch 相同,而是更多地为承诺链提供一些上下文,说明某些条件可能未完成的原因。
  • promise 链中的“错误”链接更多是为了确保调用链的顺利解决,您可以在其中解决任何问题(并知道失败的原因)。虽然可以说是相似的,但承诺不能保证的一件事是任何一个链接是否真的会产生错误,只是它们“可能”——基本上,这是它自己的“错误处理过程”

标签: javascript java exception-handling promise


【解决方案1】:

不是真的.. 在 JavaScript 中我们也有 try/catch 块。

JavaScript 中 Promises 的主要好处是像链式一样。

Java 中 Promise 的等价物是 CompletableFuture。阅读:)

【讨论】:

    【解决方案2】:

    不,它们完全不同。异常处理处理异常。 Promise 是一种在异步环境中返回值并对其进行操作的方法,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。这就是异步的意思;对您的函数的调用不会等到函数执行完毕后再继续执行,这可能会导致各种不良行为。

    Promises 是一种在检查值之前等待返回值的方法。要了解如何使用 Promise 正确设置此示例,请参阅 this

    【讨论】:

      【解决方案3】:

      Promise 和异常处理是不同的,它们是不一样的。在 javascript 中,promise 让我们可以使用。then 知道函数何时完成执行,有助于了解异步函数何时完成执行,并且 javascript 还为您提供 try/catch 支持和java一样。

      【讨论】:

        【解决方案4】:

        try/catch 检测错误本身并将控制权转移到捕获部分。 js 中也存在这种语法。

        但在then/catch 中,您必须自己通知发生错误(调用reject)。这意味着您可以在发现错误发生时通知error该错误可以是真实错误也可以不是真实错误(编程/逻辑错误)。

        【讨论】:

          猜你喜欢
          • 2018-02-18
          • 1970-01-01
          • 2015-05-20
          • 1970-01-01
          • 2015-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多