gpt4 book ai didi

javascript - RxJS 合并 2 个订阅

转载 作者:太空狗 更新时间:2023-10-29 19:33:36 25 4
gpt4 key购买 nike

我有一个输出 2 个可观察值的服务。 1 仅用于获取当前经过身份验证的用户,另一个用于获取所有事件用户。在主屏幕上,我想调用这两个 observable 来使用,这将(当前)通过订阅这两个 observable 来完成,但是第一个 observable 并不总是运行。我正在寻找一种解决方案,让两个可观察对象在页面上出现任何错误或加载之前发出一个值。我在下面的示例中尝试了 forkjoin 但它不起作用,我怀疑这是因为 forkjoin 期望发出一些东西但没有发出任何东西,但是订阅两个 observables 确实输出了我需要的数据。这是我尝试过的:

    const tt =  Observable.forkJoin(
this.auth.getActiveUsers().map((res) => res = res ),
this.auth.user.map((res) => res = res ),
);
console.log("running" );
tt.subscribe( (data) => {
console.log("data ", data );
console.log("data[0] ", data[0] );
console.log("data[1] ", data[1] );
},
err => console.error(err),
() => console.error("complete"),
);

下面是订阅在我的 service.ts 文件中的布局方式:

    Filename: Service.ts

...

// first Observable
constructor( private afAuth: AngularFireAuth,
private db: AngularFirestore ) {

this.user = this.afAuth.authState.switchMap(user => {
if (user) {
return this.db.doc<iUser>(`users/${user.uid}`).valueChanges()
} else {
return Observable.of(null)
}
})

}

...

// second Observable
getActiveUsers(): Observable<iUser[]> {
return this.db.collection<iUser>('users').valueChanges().catch(this.catchError);
}

...

最佳答案

forkJoin 需要一个数组,所以我认为这就是它在您的代码中不起作用的原因:

 const tt = Observable.forkJoin([
this.auth.getActiveUsers(),
this.auth.user
]);
// ...

关于javascript - RxJS 合并 2 个订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48306458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com