小编Dav*_*ong的帖子

如何在Promise链中正确处理错误?

假设我们有一个返回承诺3项异步任务:A,BC.我们希望将它们链接在一起(也就是说,为了清楚起见,获取返回的值AB使用它调用),但是也希望正确处理每个错误,并在第一次失败时突破.目前,我看到了两种方法:

A
.then(passA)
.then(B)
.then(passB)
.then(C)
.then(passC)
.catch(failAll)
Run Code Online (Sandbox Code Playgroud)

这里,passX函数处理每次调用成功X.但在failAll功能,我们不得不处理所有的错误A,B并且C,这可能是复杂的,不容易读,特别是如果我们有超过3个异步任务.所以另一种方式考虑到这一点:

A
.then(passA, failA)
.then(B)
.then(passB, failB)
.then(C)
.then(passC, failC)
.catch(failAll)
Run Code Online (Sandbox Code Playgroud)

在这里,我们分离出的原始的逻辑failAllfailA,failBfailC,这看似简单易读,因为所有的错误都紧挨着它的源处理.但是,这不符合我的要求.

让我们看看是否A失败(拒绝),failA不得继续调用B,因此必须抛出异常或拒绝调用.但是,这两个被抓的failBfailC,也就是说,failBfailC需要知道,如果我们已经失败与否,大概是通过保持状态(即变量).

而且,似乎我们拥有的异步任务越多,要么我们的failAll函数在大小上增长(方式1),要么failX调用更多函数(方式2).这让我想到了我的问题:

有一个更好的方法吗?

考虑:由于异常 …

javascript asynchronous promise ecmascript-6 es6-promise

17
推荐指数
2
解决办法
8022
查看次数

使用类型模块访问脚本标记中定义的变量?

我的 HTML 中有一个带有模块类型的脚本标签,它导出一个变量:

<script type="module">
  var life = 42;
  export { life };
</script>
Run Code Online (Sandbox Code Playgroud)

如何life从其他脚本标签或 Chrome 控制台访问以进行调试?

javascript ecmascript-6 es6-modules

9
推荐指数
2
解决办法
3694
查看次数