如果我在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);
}
答案 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(...)`
}