假设我们有一个返回承诺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 控制台访问以进行调试?