Tôi đang sử dụng APP_INITIALIZER như được đề xuất trong câu hỏi this, với dịch vụ của tôi trả lời lời hứa, nhưng không phải lúc nào cũng chờ nó giải quyết và tôi có thể xem bảng điều khiển thành phần của mình.đừng xác định và sau đó dịch vụ ghi nhật ký đối tượng đã tải xuống.Angular2 APP_INITIALIZER không nhất quán
Tôi cần ứng dụng không làm bất cứ điều gì trước khi dữ liệu này được tải.
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();
}
}
Có vẻ ok. Vui lòng nêu rõ bạn đang sử dụng phiên bản gói nào. Bạn có thể sao chép các vấn đề như là một fiddle/plunk? – estus
Tôi không chắc chắn tại sao bạn nhận nhật ký với các giá trị không xác định, nhưng nếu bạn sử dụng cả 'toPromise()' và 'subscribe()' trên quan sát, bạn sẽ gọi '/ auth/getuser' hai lần.Bạn nên chuỗi cũng rxjs điều hành 'share()' ('rxjs/add/operator/share') –