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