【问题标题】:ES6 Arrow function with brackets [duplicate]ES6带括号的箭头函数[重复]
【发布时间】:2016-12-08 10:00:18
【问题描述】:

我在代码中遇到了一个小问题,这让我有点困惑,希望有人能解释为什么它会这样做。

代码 1

sendText(){
    return this.http.get('/api')
        .map((response:Response) => response.json());
}

代码 2

sendText(){
    return this.http.get('/api').map((response:Response) => {
        response.json();
    });
}

这两个代码之间的主要区别在于,在 代码 2 中,我将括号放在箭头函数之后,以便在这些括号内添加我的任务,而在 代码 1 中,我使用了把括号拿出来,把任务放在一行上。

我的问题是为什么来自服务器端的对象在 Code2 中使用 angular2 提供的 subscribe 方法返回为未定义,而 Code1 返回我怀疑的对象。

【问题讨论】:

  • 使用大括号,您必须使用 return,就像在经典函数中一样。
  • 不带括号:表达式。带括号:代码块。

标签: javascript angular ecmascript-6


【解决方案1】:
(response:Response) => response.json()

这是简写

(response:Response) => { return response.json(); }

{} 允许您在块内添加 多个 语句。没有它们,函数只会运行一条语句并返回它的值。

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

【讨论】:

  • 不客气。另外,你能帮我清理一下吗?为什么你有response:Response 而不仅仅是response?这像是类型提示还是什么?
  • 嗯,从教程告诉我的。这是一种打字稿语法,可确保我它是响应类型。因此避免了未来的错误。不要认为我的话是理所当然的,虽然大声笑我还在学习。没必要吗?
  • 在Typescript中可能需要,不知道,没用过。在 JavaScript 中,这是一个语法错误。
猜你喜欢
  • 2019-02-25
  • 2017-04-26
  • 2018-04-25
  • 2017-05-22
  • 2016-03-25
  • 2020-03-01
  • 2018-09-28
  • 1970-01-01
相关资源
最近更新 更多