我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不明白它意味着什么的部分。
代码很简单,但我不明白谨慎。回报承诺意味着什么?隐含地返回是什么意思?如果它是一个愚蠢的问题,请指向一些资源,我会将其标记为已关闭。
doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {
console.log(`Got the final result: ${finalResult}`);
})
.catch(failureCallback);
重要提示:始终返回promises,否则回调将不会链接,并且不会捕获错误(当省略{}时箭头函数会隐式返回。)
答案 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