如何解决当主体为单条线时,箭头功能如何表现?
我想知道何时箭头函数只有一行,花括号和return关键字可以省略,它隐式返回那里的内容。但是,如果我不想退货怎么办。
例如,在以下代码段中,first .then
应该返回response.json
,这就是代码的作用,该行被隐式返回。但是在second .then
中,我不想返回console.log
,但根据我的说法,它也被隐式返回。
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => console.log(json))
我的问题是我是否理解正确?这真的重要吗,因为它不会改变程序的结果?如果可以的话,怎么办?
解决方法
但是,如果我不想退货怎么办。
最好的选择是使用不带return
的详细形式(带有花括号)。但是请注意,即使那样,始终调用函数 仍会得到结果(即使该函数没有return
也是如此)。如果函数不返回任何内容,则结果为undefined
。
您可以(ab)使用逗号运算符,但是我不鼓励您这样做,因此您需要()
才能做到:
.then(json => (console.log(json),void 0));
..尤其是因为它比更冗长
.then(json => { console.log(json) });
(当然还有console.log
returns undefined
,所以... :-))
我的问题是我是否理解正确?
是的,您似乎正在(除了未成年人带有单词“ line”的小题词,请参见下面的“旁注”。)
这真的很重要,因为它不会改变程序的结果吗?如果可以的话,怎么办?
对于像console.log
这样的返回undefined.
的函数,这没什么关系,如果最后的then
返回的诺言没有使用,则没有关系。
FWIW,问题代码中的真实问题是:
-
在调用
json
之前,它不会寻找HTTP成功。这是fetch
API中的步枪:它仅拒绝对 network 错误的承诺,而不拒绝 HTTP 错误。 -
它不处理拒绝。
修复这些问题:
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
.then(json => console.log(json))
.catch(error => {
// Handle/report error
});
旁注:
...当身体是一条直线时?
这里的行无关紧要。与此相关的是,=>
之后的第一个非空白字符是{\或不是{
。如果是,则箭头功能具有功能主体,如果要返回return
以外的内容,则需要显式undefined
。如果不是,则arrow函数具有简洁主体,它是单个表达式,其结果从该函数返回。
我理解得正确吗?
您理解正确,您所说的一切都很好
这真的很重要,因为它不会改变程序的结果吗?
没关系,它不会改变程序的结果,如果您有第三个then
,它可能会更改它,因为console.log
返回的值将成为参数用于您的第三次then
回调
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => console.log(json))
.then(value => /*value is the value returned by console.log which is undefined*/)
但是您不必强制使用此值,它由您决定
怎么回事?
如果您不想获取操作返回的值,则可以添加花括号
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => {console.log(json)})
.then(value => /*still undefined because a function without return still return undefined by design of the language*/)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。