【问题标题】:How can I know the promise function calling is caught exception or not我怎么知道 promise 函数调用是否被捕获异常
【发布时间】:2021-04-30 21:30:45
【问题描述】:

我有两个简单的函数如下,一个是回调,一个是Promise,在回调函数中,我可以知道函数调用者是否捕获了异常,但是在promise函数中我不知道如何处理.

第一个

  let call = function(a,b,success,fail){
      if(a==b){
         success();
       }
      else{
         if(fail){
           fail();
         }
         else{
           alert("a is not equal b");
         }
       }
  }

第二个

   let call = function(a,b){
     return new Promise(resolve,reject){
        if(a==b){
          resolve();
        }
        else{
           //I want to code here, if the call is not catch error, 
           //the system alert("a is not equal b"), otherwise call the reject.           
        }
     }
   }

【问题讨论】:

  • 没有很好的方法可以知道调用者是否正在处理一个承诺拒绝。在某些情况下有一些黑客可以工作,但我不建议去那里。所有的承诺都要求调用者处理任何可能的拒绝——这不是可选的。那是有应许的律法。这是使用您的 API 合同的一部分。尝试弥补客户端编写的错误代码并不是您的 API 本身的责任。
  • 仅供参考,在第一个中,您也无法阻止用户将 function() {} 传递给 fail 处理程序。故事的寓意——正确处理错误是您的客户的责任。
  • @jfriend00,非常感谢你的回答,如果调用者不是“catch exception”(或者没有通过fail函数),我想做一些事情,比如警告错误信息或者其他,否则调用者必须每次都捕获异常并编写警报代码,如果使用promise时没有任何方法可以处理,我只能要求调用者捕获异常并在调用时编写警报代码。
  • 我想我已经解释过,您无法可靠地知道调用者是否正在捕获承诺拒绝,因此这不是您的代码中的选项。请重新阅读我之前的评论。
  • @jfriend00 知道了,非常感谢您的帮助。

标签: javascript ecmascript-6 es6-promise


【解决方案1】:

没有很好的方法可以知道调用者是否正在处理一个 Promise 拒绝。在某些情况下有一些技巧可以使用,但我不建议去那里。

所有承诺都要求调用者处理任何可能的拒绝 - 这不是可选的。那是有应许的律法。这是使用您的 API 的合同的一部分。尝试弥补客户端编写的错误代码并不是您的 API 本身的责任,并且 Promise 并非旨在实现这一点。

因此,您不能根据是否处理承诺拒绝来更改函数的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 2023-02-10
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多