Angular2 APP_INITIALIZER 不一致

标签 angular promise observable

我正在使用 this 中推荐的 APP_INITIALIZER回答,我的服务返回一个 promise ,但它并不总是等待它解决,我可以看到我的组件 console.logging 未定义,然后服务记录下载的对象。

我需要应用程序在加载此数据之前不执行任何操作。

应用程序模块.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]

用户服务.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 对我有用。

关于Angular2 APP_INITIALIZER 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39725724/

相关文章:

javascript - .然后链接不起作用。为什么?

angular - 异步操作符和订阅 observable 有什么区别?

javascript - Angular 8 升级后,Angular 脚本被插入到 HTML 文档的开头

Angular Storybook Component 是两个模块错误的一部分

angular - 在 Angular 2 延迟加载模块中使用外部 javascript 库,而不是 index.html

javascript - JS/Angular - 找出父元素的宽度/高度内有多少 html 元素

各种 Promises 实现中失败 `reason` 的 typescript 类型?

javascript - 将 Promise 与循环和嵌套函数一起使用

javascript - 将可观察量转换为数组

java - 识别当前正在处理的元素