2016-08-02 55 views
5

我在我的代码中遇到了一个小问题,这让我感到困惑,希望有人能解释它为什么会执行它所做的事情。ES6带括号的箭头功能

代码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我拿出括号和将任务放在一行上。

我的问题是,为什么我的对象从服务器端回来为未定义代码2进来与angular2而代码1返回我怀疑对象提供的订阅方法。

+4

随着你必须使用括号'return'就像一个典型的功能。 – georg

+2

没有括号:表达式。括号:代码块。 –

回答

10
(response:Response) => response.json() 

这是该速记

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

{}让你添加块内多个语句。没有它们,函数只运行一条语句并返回其值。

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

+0

不客气。另外,你能为我清理一些东西吗?为什么你有'response:response'而不是'response'?这就像是一个类型提示或什么? –

+0

从教程告诉我的呃。这是一种打字稿语法,可以确保它是Response类型。因此避免了将来的错误。不要把我的话理所当然,尽管我仍然在学习。这是不必要的? –

+0

在打字稿中可能有必要,我不知道,我从来没有用过它。在JavaScript中,这是一个语法错误。 –