【发布时间】:2019-03-19 08:31:30
【问题描述】:
我想了解 Javascript 中的承诺链。所以我写了这个小小提琴: https://jsfiddle.net/GarfieldKlon/89syq4fh/
它按预期工作。 c 等待 b,b 等待 a。
但是当我将这些行更改为:
a().then( result => console.log(result))
.then( () => {b().then( result => console.log(result))})
.then( () => {c().then( result => console.log(result))});
所以我在 b 和 c 周围添加了花括号,然后输出为 1、3、2。我不明白为什么。
当我添加退货时,它会再次起作用:
a().then( result => console.log(result))
.then( () => {return b().then( result => console.log(result))})
.then( () => {return c().then( result => console.log(result))});
但是为什么呢?当没有花括号时,您只能写一个语句,对吗?而且这个语句是隐式返回的?
当你使用花括号时,你必须明确地返回一些东西?
但是为什么在使用大括号而不返回时会弄乱顺序呢?为什么返回丢失时它仍然会记录一些东西?
【问题讨论】:
-
用花括号,你需要返回值,这是热胖箭头的作品。
-
在这两种情况下,排序都是随机的。在
then块中返回实际上是为了消耗下一个then块(在您的情况下不会发生) -
这与 Promise 没有任何关系,这就是箭头函数语法的工作原理。如果你定义了一个块体,除非你明确地做,否则什么都不会返回。
-
@varun agarwal 在哪些情况下排序是随机的?链接承诺时,顺序不应该是随机的,对吗?
标签: javascript promise es6-promise chaining method-chaining