在ngOnInit async上调用函数?

Fel*_*lix 8 asynchronous ngoninit angular

如果我称之为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);
}
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 18

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(...)`
}
Run Code Online (Sandbox Code Playgroud)

  • `getSomething()`被调用,`this.someService.getData()`被调用(但是立即返回,`getSomething()`返回,`doSomethingElse()`被执行,`ngOnInit()`返回.然后最终服务器响应到达并执行`result => {this.result = result}`(你可以看到你传递给`subscribe`的内容,比如注册一个事件处理程序). (2认同)