" map((respone)=> respone.json())"之间的区别和" map((respone)=> {respone.json();})"

时间:2017-10-23 21:57:50

标签: javascript angular rxjs

这是源代码:

export class PostComponent implements OnInit {

    posts: any[];

    constructor(private http: Http, private service: PostService) {
    }
    getAll1() {
    const url = 'http://jsonplaceholder.typicode.com/posts';
    this.http.get(url)
    .map((respone) => respone.json())
    .subscribe(posts => this.posts = posts );
    }  
  }

`

它工作正常,但如果我为" respone.json"添加大括号,那么visual stdio代码提示错误(见下文)。 添加花括号之后的源代码如下:

export class PostComponent implements OnInit {

    posts: any[];

    constructor(private http: Http, private service: PostService) {
    }
    getAll1() {
    const url = 'http://jsonplaceholder.typicode.com/posts';
    this.http.get(url)
    .map((respone) => {respone.json();})
    .subscribe(posts => this.posts = posts );
    }  
  }

错误出现在单词" this.posts"最后一行的错误是:[ts] Type' void'不能指定为'任何[]'。

为什么?

1 个答案:

答案 0 :(得分:4)

.map((respone) => respone.json())实际上与此相同:

.map((respone) => { return respone.json() })

虽然.map((respone) => { respone.json() })与此类似:

.map((respone) => { respone.json(); return undefined; })

因此,在您的第二个代码块中,respone.json()才被解雇。