订阅功能无法正常工作

Posted

技术标签:

【中文标题】订阅功能无法正常工作【英文标题】: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 之后......任何人都可以向我解释......?!

【问题讨论】:

这是开发人员在使用 javascript 时经常遇到的问题。所以你在熟悉的领域。查看***.com/questions/14382567 和***.com/questions/2637626 【参考方案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记住一切都是异步的。

以上是关于订阅功能无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

发布和订阅无法正常工作

两个用户使用一个帐户时,PayPal 订阅无法正常工作

嵌套在 ngIf 中时,异步管道订阅无法正常工作

s-s-rS 报告无法通过计划订阅工作,但可以正常工作

Pubsub.pull 请求无法正常工作 - 去吧

免费试用实施macOS app的自动续订订阅