У меня есть настройка, где я запрашиваю firebase для списка любимых сообщений пользователя.RxJS - switchMap не испускает значение, если входной наблюдаемый пустой массив
В принципе, сначала я запрашиваю для пользователей, а затем для каждого типа получаю соответствующий пост - все в одной наблюдаемой последовательности.
Проблема возникает, когда пользователю не нравится единственный левый пост. В этом случае (когда подобный массив становится пустым) ничто не срабатывает из наблюдаемого, и представление не обновляется (всегда есть хотя бы одно сообщение).
С одной стороны, это поведение кажется логичным и понятным, но, с другой стороны, я не уверен, как сделать окончательный Исследуемый излучение, даже если вход в switchMap пуст. Может быть, должен сменить оператора.
getUserFavourites(userId = ""):Observable<Post[]>
{
if (!this.userFavourites$) {
this.userFavourites$ = this.af.database.list('/ranks_by_user/' + userId, {
query: {
limitToFirst: 50
}
}) //Emits value here (even empty array)
.switchMap((likes: any[]) => Observable.combineLatest(
likes.map(like => this.af.database.object("/posts/" + like.$key).first())
)) //Does not emit new value here if likes array was empty
.map(p => {
return p.map(cit => Post.unpack(p));
}).publishReplay(1).refCount()
}
return this.userFavourites$;
}
Я думаю, что когда массив любит это нуль должен бросить ошибку, и что он останавливает цепь, вы можете попытаться добавить уловку –
Спасибо за идею, приятель. Это, вероятно, будет работать. На самом деле, я дам ему попробовать :) –
Нашел отличное решение. Проверьте это. –