我正在使用APP_INITIALIZER,就像在this的回答中推薦的那樣,我的服務返回了一個承諾,但它並不總是等待它解決,我可以看到我的組件console.logging undefined,然後服務記錄下載的對象。Angular2 APP_INITIALIZER不一致
我需要的應用程序在此數據加載之前不做任何事情。
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
@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();
}
}
它看起來OK。請說明您正在使用的軟件包版本。你是否能夠將問題複製爲小提琴? – estus
我不確定你爲什麼獲取未定義值的日誌,但是如果你在observable上同時使用'toPromise()'和'subscribe()',你將會調用'/ auth/getuser'兩次。你應該鏈接rxjs運算符'share()'('rxjs/add/operator/share') –