要让APP_INITIALIZER从其外部发出的HTTP请求中读取响应,可以使用RxJS的toPromise()方法来将Observable转换为Promise,并在APP_INITIALIZER函数中使用async/await语法来等待响应。
以下是一个示例代码解决方法:
app-initializer.ts
的文件,并在其中定义一个函数来处理HTTP请求和响应:import { HttpClient } from '@angular/common/http';
export function initializeApp(http: HttpClient) {
return () => {
return new Promise((resolve, reject) => {
http.get('your-api-url').toPromise()
.then((response) => {
// 处理响应数据
resolve();
})
.catch((error) => {
reject(error);
});
});
};
}
app.module.ts
文件中导入initializeApp
函数和HttpClientModule
:import { BrowserModule } from '@angular/platform-browser';
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { HttpClientModule, HttpClient } from '@angular/common/http';
import { initializeApp } from './app-initializer';
@NgModule({
declarations: [
// ...
],
imports: [
BrowserModule,
HttpClientModule
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: initializeApp,
deps: [HttpClient],
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
在这个示例中,我们将initializeApp
函数提供给APP_INITIALIZER
提供程序,并注入HttpClient
以进行HTTP请求。
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `Hello Angular!
`,
})
export class AppComponent implements OnInit {
constructor() {}
ngOnInit() {
// 在这里进行其他初始化操作...
}
}
通过上述步骤,你就可以在APP_INITIALIZER函数中读取外部HTTP请求的响应,并在应用程序初始化期间执行其他操作。