为什么在角度教程中我可以做'this.handleError'而不传递参数?

时间:2017-07-02 00:21:43

标签: angular

在角度教程中我有这个

private heroesUrl = 'api/heroes';  // URL to web api

constructor(private http: Http) { }

getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
             .toPromise()
             .then(response => response.json().data as Hero[])
             .catch(this.handleError);
}

private handleError(error: any): Promise<any> {
  console.error('An error occurred', error); // for demo purposes only
  return Promise.reject(error.message || error);
}

我的问题是.catch(this.handleError)如何运作?

为什么我可以在没有传递参数的情况下执行this.handleError

2 个答案:

答案 0 :(得分:2)

您将函数作为变量传递给另一个函数。然后,第一个函数最终调用您传递的函数。这被称为回调&#39;。查看本教程http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

基本上就是这样的。

var func1 = function( callback ) {
    callback("hello");
}

var func2 = function( text ) {
    console.log(text);  // hello
}

func1( func2 );    

答案 1 :(得分:0)

Typescript编译将为您处理。 等效代码将显示为

getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
             .toPromise()
             .then(response => response.json().data as Hero[])
             .catch(funtion(error)  {
                   console.error('An error occurred', error); 
                   return Promise.reject(error.message || error);
}

注意:为了理解我单独编译catch部分而不是完整功能。

但是,如果您想明确指示参数,可以使用如下,

getHeroes(): Promise<Hero[]> {
    return this.http.get(this.heroesUrl)
         .toPromise()
         .then(response => response.json().data as Hero[])
         .catch((response)=> {
                    this.handleError(response);
         });
}