首页 > 解决方案 > 当正文是单行时,箭头函数的行为如何?

问题描述

我想知道箭头函数何时只有一行,大括号和 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))

我的问题是我是否正确理解了这一点?这真的很重要,因为它不会改变我的程序的结果吗?如果它确实有什么办法呢?

标签: javascriptpromisearrow-functions

解决方案


但是,如果我不想返回任何东西怎么办。

您最好的选择是使用不带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,问题中代码的真正问题是:

  1. 在调用json. 这是fetchAPI 中的枪:它只拒绝网络错误的承诺,而不是HTTP错误。

  2. 它不处理拒绝。

修复那些:

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. 如果不是,箭头函数有一个简洁的主体,它是一个表达式,其结果从函数返回。


推荐阅读