当前位置: 首页 > 知识库问答 >
问题:

promise.all包装器,可以捕获错误

严元白
2023-03-14

我有一个简单的脚本:

Promise.all(links.map(function (l) {
  return Promise.resolve(require(l).r2gSmokeTest())
     .then((v:any) => ({path: l, result: v}));
}))
.then(function(results){

})
.catch(function(e){

}):
const getAllPromises = function(links){
   return Promise.resolve(null).then(function(){
       return Promise.all(links.map(function (l) {
         return Promise.resolve(require(l).r2gSmokeTest())
         .then((v:any) => ({path: l, result: v}));
}));
Promise.all(function(){
   return values.map(v => whatever);
});

这样,如果promise,任何错误都可以被捕获。所有的都不在promise链中调用...

共有1个答案

佟和平
2023-03-14

使用一个不能抛出的异步函数-它只会在异常发生时返回一个拒绝的promise:

Promise.all(links.map(async function (l) {
  const v: any = await require(l).r2gSmokeTest();
  return {path: l, result: v};
}))

通常,任何执行异步操作的函数都希望总是返回promise,而从不同步抛出。您的map回调应该遵循这一点--如果需要,require调用周围的try…catch(e){return promise.reject(e);}。您还可以考虑使用类似Bluebird的promise.try的助手函数。

 类似资料:
  • 问题内容: 此问题与跨域资源共享(CORS)有关。 如果在发出CORS请求时出现错误,Chrome(以及AFAIK其他浏览器)会将错误记录到错误控制台。消息示例可能如下所示: XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我想知道是否有办法以编程方式获取此错误消息?我尝试将调用包装在try/catch中,也尝试添加事件处理程序。两者均未收到错误消息。 问题答案: 看到:

  • 在我自制的PHP MVC框架中,我编写了一个小错误处理程序,它将PHP错误包装在异常中,然后抛出它。 然后使用注册。除了致命的错误(没有双关语)之外,这一切都很好。我的自定义错误处理程序仍被调用,但我无法捕获抛出的。 这种错误的一个例子是试图包含一个不存在的文件: 调用我的自定义错误处理程序并抛出异常,但代码永远不会到达“catch”块。相反,PHP会生成HTML(糟糕!): 警告:未捕获异常“E

  • 闭包本身是相当灵活的,可以实现所需功能来让闭包运行而不用类型标注(原文:Closures are inherently flexible and will do what the functionality requires to make the closure work without annotation)。这允许变量捕获灵活地适应使用 情况,有时是移动(moving)有时是借用(borro

  • 问题内容: 在最近的项目中,我建议在测试工具代码中捕获RuntimeException并将其记录下来。该代码处理来自数据库的一系列输入,并且我不希望由于任何一个输入(空值,非法参数等)失败而导致测试停止。不用说,我的建议引起了热烈的讨论。 捕获任何一种RuntimeException是否可以接受?如果是,那么可以捕获RuntimeExceptions的其他方案还有哪些? 问题答案: 捕获此异常的原

  • 问题内容: 有效的Java建议我们不要这样做 。总是对的吗? 在许多情况下,仅捕获身体。 如果我不接听电话,如何检查发生的地点? 而且,如果我抓住了但身体空了,那我们那时就无法获得任何堆栈信息,可以吗? 更新 我分析了在Google Android源AOSP4.2.2_r1.2中捕获RuntimeException的统计信息。 有249个RuntimeException捕获,并且以下是catch-

  • 问题内容: 我已经在寻找我的答案几个小时了,但无法解决。请帮忙。 我想要做的是在Android中使用VpnService来抓取网络数据包,例如应用程序tPacketCapture 我首先使用了Google的ToyVpn示例代码并对其进行了修改,所以我不将数据发送到服务器。但是,我不确定这是否正确。 我的configure方法在调用build()之前将wlan ip地址用于binder.addAdd