在 ngOnInit 异步调用函数吗?

Is calling a function on ngOnInit async?

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

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

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

ngOnInit() 本身不等待异步调用。 您自己可以按照仅在异步调用完成时执行的方式链接代码。

例如你放在subscribe(...)里面的东西,当数据到达时执行。

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

有一些路由器生命周期挂钩等待返回的承诺或可观察对象,但 none 组件或指令生命周期挂钩会。

更新

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

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(...)`
}