假设我们有一个返回承诺3项异步任务:A
,B
和C
.我们希望将它们链接在一起(也就是说,为了清楚起见,获取返回的值A
并B
使用它调用),但是也希望正确处理每个错误,并在第一次失败时突破.目前,我看到了两种方法:
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)
在这里,我们分离出的原始的逻辑failAll
为failA
,failB
和failC
,这看似简单易读,因为所有的错误都紧挨着它的源处理.但是,这不符合我的要求.
让我们看看是否A
失败(拒绝),failA
不得继续调用B
,因此必须抛出异常或拒绝调用.但是,这两个被抓的failB
和failC
,也就是说,failB
和failC
需要知道,如果我们已经失败与否,大概是通过保持状态(即变量).
而且,似乎我们拥有的异步任务越多,要么我们的failAll
函数在大小上增长(方式1),要么failX
调用更多函数(方式2).这让我想到了我的问题:
有一个更好的方法吗?
考虑:由于异常 …
我的 HTML 中有一个带有模块类型的脚本标签,它导出一个变量:
<script type="module">
var life = 42;
export { life };
</script>
Run Code Online (Sandbox Code Playgroud)
如何life
从其他脚本标签或 Chrome 控制台访问以进行调试?