【问题标题】:Reactive rxjs subscribe not running on complete反应式 rxjs 订阅未在完成时运行
【发布时间】:2017-05-19 08:23:32
【问题描述】:

我有具有此功能的 DBService 打字稿类

`initialiseDb(): Observable < any > {


let source = Observable.create((observer) =>
{}

    openRequest.onsuccess = (event: any) =>
    {
        console.log("Database open");
        this.localDb = event.target.result;
    }
    observer.next();
    observer.complete();
});
return source;

}

在 ngOnInit 上的 app.component.ts 上

let dbInitObservable = this.localDb.initialiseDb().subscribe
        ((res => alert("Initilisation")), err => alert("Error"), () => this.authService.autoSignIn());

我需要在initialiseDb 被调用并完成后才从authService 调用autoSignIn

任何想法?,没有语法错误,但 this.authService.autoSignIn() 永远不会被调用。

Ta。

【问题讨论】:

  • 你在哪里 next 这个 observable 的东西?
  • 就在返回源代码之前
  • 是的,.next.complete 确实需要在 .onsuccess 挂钩内。你看到的都是异步代码。
  • 在 Neil 上发现了,这很有效。我可以不做'observer.next();观察者.完成(this.service.autosignIn); '在'onsuccess'之外怎么行不通?

标签: angular typescript system.reactive observable


【解决方案1】:

您需要在传递给Observable.create() 的回调中调用数据库open(),然后您需要侦听数据库并从侦听器发出正确的下一步、错误和完成。

initialiseDb(): Observable<any> {
  return Observable.create((observer) => {
    let openRequest = localDatabase.indexedDB.open(dbName);

    openRequest.onsuccess = (event: any) => {
      console.log("Database open");
      this.localDb = event.target.result;
      observer.next(this.localDb);
      observer.complete();
    }
    openRequest.onerror = (event: any) => {
      console.log("Database error: " + e.target.errorCode);
      observer.error(e.target.errorCode);
    }
  })
}

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多