Ответ 1
Вы спросили о цепочке против "ветвления.
Предполагая, что f1
и f2
представляют асинхронные операции, возвращающие promises, да, существует значительная разница. Для варианта 1:
- Он сериализует
fn1
иfn2
, поэтомуfn2
не вызывается до тех пор, пока не будет разрешено обещание, возвращенноеfn1
. -
.catch()
применяется к ошибке вfn1
илиfn2
-
fn2
не будет вызываться, еслиfn1
отклоняется.
Для варианта 2:
-
fn2
не ждет разрешенияfn1
.fn2
вызывается, как толькоfn1
возвращает аналогичноfn1(); fn2();
. Это означает, что асинхронные операции, начинающиеся сfn1
иfn2
, будут одновременно выполняться в полете (иногда они называются параллельными, а не серийными). -
.catch()
не применяется ни к чему, потому что это не обещание, созданное одним из вызовов.then()
. - Оба
fn1
иfn2
будут вызываться независимо от ошибки в.
Другой связанный вопрос/ответ: Понимание javascript promises; стеки и цепочка