是否在ngOnInit async上调用函数?

时间:2016-09-14 13:42:10

标签: angular asynchronous ngoninit

如果我在ngOnInit()中调用一个函数来进行可观察的调用来获取数据,那么ngOnInit中的this.getSomething()调用是否仍然异步,或者ngOnInit等到this.getSomething()返回结果?基本上" doSomethingElse"在this.getSomething()完成之前或之后在ngOnInit()中执行?

ngOnInit() {
    this.getSomething();
    doSomethingElse;
}

getSomething() {
    this.someService.getData()
        .subscribe(
            result => {
                this.result = result;
            },
    error => this.errorMessage = <any>error);
}

1 个答案:

答案 0 :(得分:17)

ngOnInit()本身并不等待异步调用。 您可以自己链接代码,它只在异步调用完成时执行。

例如,当数据到达时,您在subscribe(...)内放置的内容将被执行。

subscribe(...)之后立即执行的代码(异步调用完成之前)。

有一些路由器生命周期挂钩等待返回的promises或observable,但没有任何组件或指令生命周期挂钩。

<强>更新

要确保在this.getSomething()完成后执行getData()后的代码,请将代码更改为

ngOnInit() {
    this.getSomething()
    .subscribe(result => {
      // code to execute after the response arrived comes here
    });
}

getSomething() {
    return this.someService.getData() // add `return`
        .map( // change to `map`
            result => {
                this.result = result;
            },
  //  error => this.errorMessage = <any>error); // doesn't work with `map` 
  // (could be added to `catch(...)`
}