如何等待来自各种可观察对象的数据执行操作

Posted

技术标签:

【中文标题】如何等待来自各种可观察对象的数据执行操作【英文标题】:How to wait for data from various observables to perform an action 【发布时间】:2020-11-21 15:54:56 【问题描述】:

我的角度有问题。我想从各种可观察对象中获取数据,并在所有数据到达后采取行动。

我已经分别尝试了获取地址和数据Person的方法,如果它们运行良好,我将示例留给获取地址的情况。

getDireccion() 
    this.store
        .select('direccion')
        .subscribe(( direccion ) => (this.direccion = direccion))
        .unsubscribe();

但是现在我想确保所有地址数据和人员数据都已经存在以便能够执行另一个操作,这就是我使用 forkJoin 的原因,但它对我来说效果不佳,它没有'不执行console.log ('responses ==>', response);

forkJoin([ 
    this.store.select('direccion'),
    this.store.select('datosPersona')
]).subscribe((response) => 
    console.log('respuestas ==> ', response);
);

我正在使用 ngrx 进行状态处理

【问题讨论】:

Esta pagina es para ingles, si puede cambiar la idioma nos podemos ayudarte 用英文试试 SO 是一个仅限英文的网站 - 请遵守网站规则,将您的问题(包括标题!)翻译成英文,或者发布在Spanish *** site 【参考方案1】:

您应该使用combineLatest,如果您想在组件生命周期中发生更改时执行某些操作,或者使用take(1) 仅选择一次。它不起作用的原因是因为 forkJoin 等待 observable 完成并且存储 select 从未真正完成:

combineLatest([ 
    this.store.select('direccion'),
    this.store.select('datosPersona')
]).subscribe((response) => 
    console.log('respuestas ==> ', response);
);

forkJoin([ 
    this.store.select('direccion').pipe(take(1)),
    this.store.select('datosPersona').pipe(take(1))
]).subscribe((response) => 
    console.log('respuestas ==> ', response);
);

【讨论】:

以上是关于如何等待来自各种可观察对象的数据执行操作的主要内容,如果未能解决你的问题,请参考以下文章

如何检查oracle数据库性能

KnockoutJS - 可观察对象的可观察数组,包含来自 SQL 服务器的数据

如何使用 rxjava/retrofit 正确等待/观察来自服务器的传入数据

如何使用来自html的异步管道获取可观察对象的嵌套值

如何等待多个可观察流解决并一起返回它们

线程各种状态转移分析