javascript - 当正文是单行时,箭头函数的行为如何?
问题描述
我想知道箭头函数何时只有一行,大括号和 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
都会返回undefined
,所以...... :-))
我的问题是我是否正确理解了这一点?
是的,你似乎是(除了对“线”这个词的小小狡辩,请参阅下面的“旁注”)。
这真的很重要,因为它不会改变我的程序的结果吗?如果它确实有什么办法呢?
console.log
与返回类似的函数当然没关系undefined.
如果没有使用该 final 返回的承诺then
,那么不,没关系。
FWIW,问题中代码的真正问题是:
在调用
json
. 这是fetch
API 中的枪:它只拒绝网络错误的承诺,而不是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
});
边注:
...当身体是单行时?
行在这里不相关。=>
相关的是is 或不是 a之后的第一个非空白字符{
。如果是,箭头函数有一个函数体,return
如果你想返回undefined
. 如果不是,箭头函数有一个简洁的主体,它是一个表达式,其结果从函数返回。
推荐阅读
- python - 使用 Python 更新 JSON 文件属性
- javascript - Three.js 无法为 mtl & obj 文件加载纹理(带有图像纹理的部分未显示)
- eigen3 - Eigen3 缩放矩阵
- php - NGINX 将某些目录标记为 403,但其他目录不标记
- java - 使用 RestTemplate 获取 JSON 对象时出现 HttpMessageNotReadableException 异常
- facebook-graph-api - 如何创建 Facebook 开发/测试帐户?
- python - 如何在 django 中使用不同的表注册不同类型的用户?
- vue.js - VueJS 禁用特定属性的反应性
- javascript - 如何为 HTML 输入实现验证消息
- php - 如何合并后续数组