我想知道以下两者有区别吗?
aPromiseObj.then(fn1).then(fn2).catch(fn3);
aPromiseObj.then(fn1); aPromiseObj.then(fn2); aPromiseObj.catch(fn3);
工作流程会改变吗?
PS:我处于有角度的环境中,尽管我想从更广泛的角度来思考这一点。
您曾询问过“连锁” vs. “分枝”.
假如说f1
and f2
表示返回 Promise 的异步操作,是的,存在显着差异。对于选项 1:
- 它序列化
fn1
and fn2
以便fn2
直到承诺返回后才被调用fn1
已经解决了。
-
.catch()
适用于任一错误fn1
or fn2
or if aPromiseObj
拒绝。
-
fn2
如果fn1
拒绝。
对于选项 2:
-
fn2
不等待fn1
解决。fn2
一旦被调用fn1
返回类似于fn1(); fn2();
。这意味着异步操作由fn1
and fn2
两者将同时进行(有时称为并行运行而不是串行运行)。
- The
.catch()
不适用于任何一个,因为它不在由任何一个创建的 Promise 上.then()
来电。这.catch()
在选项 2 中,仅适用于 ifaPromiseObj
拒绝,不f1()
or f2()
.
- Both
fn1
and fn2
无论其中任何一个出现错误,都会被调用。
另一个相关问题/答案:理解 javascript 的承诺;堆栈和链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)