【发布时间】: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