【问题标题】:subscribe function doesn't work correctly订阅功能无法正常工作
【发布时间】:2018-02-01 11:37:21
【问题描述】:

在这段代码中,subscribe 函数在 loadFromDB 函数的最后一行之后执行:

  loadFromDB(){
    const loading = this.loadingCtrl.create({
      content: 'pleas wait'
    });
    loading.present();
    this.getInterviewFromDB()
      .subscribe((data) => {
        this.events = data;
        console.log( 'before');
      });
    this.getMeetingsFromDB().subscribe((data)=>{
      this.events.concat(data);
    });
    loading.dismiss();

    console.log( 'after');
  }

加载存在并在从数据库加载任何数据之前关闭 这是日志的输出

说明了订阅功能下的那一行 Execute 在其中的 console.log 之后......任何人都可以向我解释......?!

【问题讨论】:

标签: angular typescript firebase ionic-framework ionic3


【解决方案1】:

这就是回调的工作方式。 subscribe 将回调函数作为参数。我建议您在继续之前了解什么是回调以及它们是如何工作的。

这里有一些关于subscribe 工作原理的信息:ReactiveX subscribe function

Robin 在forkJoin 的回答中提供了一个很好的解决方案。 forkJoin 将多个 Observable 发出的值连接到一个数组中,并创建一个新的 Observable。然后,您可以订阅这个 Observable,就像 Robin 在他的示例中所做的那样,以获取作为回调的第一个参数的数组值。

【讨论】:

    【解决方案2】:

    这完全有道理。您正在订阅异步流。你不能指望他们按顺序完成。如果您希望它们同时完成,您可以执行以下操作:

    Observable.forkJoin(this.getInterviewFromDB(), this.getMeetingsFromDB())
        .subscribe(res => {
           let interviews = res[0];
           let meetings = res[1];
        })
    

    【讨论】:

    • mr.Robin 感谢您的关心,但我还是不清楚.. 可以稍后给我解释一下吗?!
    • 它是RxJs。你可以在那里阅读更多关于它的信息:github.com/Reactive-Extensions/RxJS记住一切都是异步的。
    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 2016-07-26
    • 2020-03-05
    • 2016-10-06
    • 1970-01-01
    • 2017-09-23
    • 2019-03-28
    相关资源
    最近更新 更多