回头承诺了吗?

时间:2018-01-16 21:36:43

标签: javascript promise

我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不明白它意味着什么的部分。

代码很简单,但我不明白谨慎。回报承诺意味着什么?隐含地返回是什么意思?如果它是一个愚蠢的问题,请指向一些资源,我会将其标记为已关闭。

doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {
console.log(`Got the final result: ${finalResult}`);
})
.catch(failureCallback);

重要提示:始终返回promises,否则回调将不会链接,并且不会捕获错误(当省略{}时箭头函数会隐式返回。)

1 个答案:

答案 0 :(得分:5)

返回承诺通常意味着能够链接另一个.then

这里你没有回复任何东西:

.then(finalResult => {
  console.log(`Got the final result: ${finalResult}`);
})

所以你不能在它之后链接另一个.then

修改
正如评论中所提到的,.then实际上总是会返回另一个承诺 但是有一个问题,如果你的resolve回调不会返回任何内容(undefined),那么此承诺的调用者将获得undefined作为参数。
所以基本上只有链“空”then没有收获。

这是一个小例子的小例子:

const promise = new Promise((resolve, reject) => {
  resolve("#1");
});

promise
  .then((result) => result)
  .then((result) => `${result} #2`)
  .then((result) => console.log(result))
  .then((result) => `${result} #4`) // <-- result === undefined
  .then((result) => console.log(result))
  .then((result) => console.log(result))
  .then((result) => '#7')
  .then((result) => console.log(result));

<小时/> 至于这句话:

  当省略{}时,

箭头函数会隐式返回

Arrow functions可以通过两种方式返回:

隐含:

const func = () => 'hi there' // implicitly returns a string

但是当函数{}有一个正文时,不会返回任何内容:

const func = () => {'hi there'} // nothing is returned

明确

当我们使用return关键字时:

 const func = () => { return 'hi there'; } // explicitly returns a string

<强>陷阱:
有时你想要返回一个对象,所以人们常常犯错:

const func = () => {a:1} // nothing is returned, just a meaningless label a

所以“修复”就是用表达式包装对象:

const func = () => ({ a:1 }) // implicitly returns an object