Angular2 APP_INITIALIZER 不一致 [英] Angular2 APP_INITIALIZER not consistent
本文介绍了Angular2 APP_INITIALIZER 不一致的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用 APP_INITIALIZER,就像 this 答案中推荐的那样,我的服务返回了一个承诺,但它没有t 总是等待它解决,我可以看到我的组件 console.logging 未定义,然后服务记录下载的对象.
I am using APP_INITIALIZER like it is recommended in this answer, with my service returning a promise, but it doesn't always wait for it to resolve and I can see my component console.logging undefined and then the service logging the downloaded object.
我需要应用程序在加载此数据之前不执行任何操作.
I need the app to not do anything before this data is loaded.
app.module.ts
app.module.ts
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { Http, HttpModule, JsonpModule } from '@angular/http';
import { UserService } from '../services/user.service';
<...>
@NgModule({
imports: [
BrowserModule,
HttpModule,
FormsModule,
JsonpModule,
routing
],
declarations: [
AppComponent,
<...>
],
providers: [
<...>
UserService,
{provide: APP_INITIALIZER,
useFactory: (userServ: UserService) => () => userServ.getUser(),
deps: [UserService, Http],
multi: true
}
],
bootstrap: [AppComponent]
user.service.ts
user.service.ts
@Injectable()
export class UserService {
public user: User;
constructor(private http: Http) { }
getUser(): Promise<User> {
console.log('get user called');
var observable= this.http.get('/auth/getuser', { headers: getHeaders() })
.map(extractData);
observable.subscribe(user => {this.user = user;
console.log(this.user)});
return observable.toPromise();
}
}
推荐答案
试试下面的代码:
getUser(): Promise<User> {
console.log('get user called');
var promise = this.http.get('/auth/getuser', {headers: getHeaders()})
.map(extractData)
.toPromise();
promise.then(user => {
this.user = user;
console.log(this.user);
});
return promise;
}
我遇到了同样的问题,使用 promise 而不是 observable 对我来说很有效.
I was facing the same problem, and using a promise instead of a observable did the trick for me.
这篇关于Angular2 APP_INITIALIZER 不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文