gpt4 book ai didi

javascript - RxJS:forkJoin 似乎不起作用

转载 作者:行者123 更新时间:2023-12-03 02:34:00 26 4
gpt4 key购买 nike

我目前正在使用 combineLatest() 方法来获取我所有的 friend 并将其作为列表。但是,当我尝试从头开始删除某个项目时,它会产生排序问题。 ( View 无法正确渲染)因此,我想从 combineLatest() 切换到 forkJoin() 以使所有 friend 都在一次。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';

friends$: Observable<User[]>;

getMyFriendList() {
this.friends$ = this.userService.getMyFriendsId().switchMap(friendKeys => {
return Observable.forkJoin(friendKeys.map(user => this.userService.getFriends(user.key)));
});
}

但是当我调用 forkJoin() 时什么也没有发生。我在这里做错了什么?

getMyFriendsId() {
let friendRef = this.getFriendRef(this.currentUserId);
this.friends$ = friendRef.snapshotChanges().map(actions => {
return actions.map(a => ({ key: a.payload.doc.id, ...a.payload.doc.data()}));
});
return this.friends$;
}

getFriends(uid: string) {
return this.getUsersRef(uid).valueChanges();
}

编辑

getMyFriendsId() 当登录用户删除好友列表中的另一个用户时更新新数据。

<ion-list>
<ion-list-header>Friends <span class="total-friends"></span></ion-list-header>
<ion-item-sliding *ngFor="let user of friends$ | async">
<ion-item *ngIf="user" (click)="viewUserProfile(user)">
<ion-avatar (click)="showOriginalAvatarImage()" item-start>
<img-loader [src]="user.thumbnailURL" [spinner]="true"></img-loader>
</ion-avatar>
<h2>{{user.displayName}}</h2>
<p>{{user.statusMessage}}</p>
</ion-item>
...
<ion-list>

生命周期事件

ionViewWillEnter() {
// Runs when the page is about to enter and become the active page.;
this.getMyFriendList();
}

最佳答案

.forkJoin()组合所有可观察量,并且仅当所有可观察量都已完成时才会发出值。您的代码不起作用的原因是您正在使用 valueChanges(),并且它是一种永远不会完成的事件 - 它们永远监听值的更改!

如果您确实想使用 .forkJoin (或为了证明这一点),请将 take(1) 添加到您的 valueChanges 中:

getFriends(uid: string) {
return this.getUsersRef(uid).valueChanges().take(1);
}

上面的代码会起作用,因为它用 take() 强制完成可观察的,但显然会达不到目的,因为你的代码只会起作用一次。结论是,如果您想继续观察特定值的变化,并将其与另一个可观察的值结合起来,是的,请使用combineLatest()

关于javascript - RxJS:forkJoin 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610692/

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