我试图将两个可观察对象组合起来,使接受两个值的调用服务方法具有几个值。但这里我有一些错误
>
控制台中-
您在需要流的位置提供了“未定义”。您可以提供一个可观察的、promise的、数组的或可观察的。在SwitchMapSubscriber的innerSubscribe(innerSubscribe.js:71)的subscribeTo(subscribeTo.js:27)_SwitchMapSubscriber上的innerSub(switchMap.js:44)_接下来(switchMap.js:34)在SwitchMapSubscriber上。下一个(Subscriber.js:49)在CombineLatestSubscriber。InnerSubscriber上的notifyNext(combineLatest.js:73)_下一步(InnerSubscriber.js:11)在InnerSubscriber。下一步(Subscriber.js:49)在BehaviorSubject_在BehaviorSubject订阅(BehaviorSubject.js:14)_trySubscribe(observeable.js:42)
>
定义观察对象和对象。
private openSortQuerySubject: BehaviorSubject<string> = new BehaviorSubject<string>(this.formatSortQuery(this.multiSortMeta));
public openSortQuery: Observable<string> = this.openSortQuerySubject.asObservable();
private closedSortQuerySubject: BehaviorSubject<string> = new BehaviorSubject<string>(this.formatSortQuery(this.multiSortMeta));
public closedSortQuery = this.closedSortQuerySubject.asObservable();
合并观测值。
const openQueries$ = combineLatest([this.openFilterQuery, this.openSortQuery]);
const closedQueries$ = combineLatest([this.closedFilterQuery, this.closedSortQuery]);
在服务方法中使用合并的值。
openQueries$
.pipe(
switchMap(([filter, sort]) => {
this.alertService
.listAlerts(filter, sort);
}),
tap(v => console.log(v))
)
.subscribe((openAlerts) => {
this.openAlertsCount = openAlerts.length;
this.openAlerts = this.parseAlerts(openAlerts);
});
closedQueries$
.pipe(
switchMap(([filter, sort]) => {
this.alertService
.listAlerts(filter, sort);
})
)
.subscribe((closedAlerts) => {
this.closedAlertsCount = closedAlerts.length;
this.closedAlerts = this.parseAlerts(closedAlerts);
});
您必须在switchMap
回调中返回一个可观察对象(或者RxJS知道如何将其转换为可观察对象)。
不是这个:
switchMap(([filter, sort]) => {
this.alertService.listAlerts(filter, sort);
})
但是这(假设listAlerts
返回一个可观察的、promise的或类似的):
switchMap(([filter, sort]) => {
return this.alertService.listAlerts(filter, sort);
})
switchMap 函数签名: switchMap(project: function: Observable, resultSelector: function(outerValue, innerValue, outerIndex, innerIndex): any): Observable 映射成 observable,完成前一个内部 observable,发出值。 如果你想要维护多个内部 s
有人,请解释一下SwitchMap和FlatMap在Javascript方面的区别(在角度透视图中,rxjs 5) 以我的理解。 SwitchMap仅发出最新的可观察值,并取消先前的可观察值。 flatMap收集所有单独的可观测数据,并在单个数组中返回所有可观测数据,而不关心可观测数据的顺序。异步工作。 concatMap保持秩序并发出所有可观察值,同步工作 是这样吗? mergeMap与上面的工
运算符在可观察的末尾发出值(完成时)。 我正在寻找一种在中使用的方法。当外部可观察对象发出值或完成时,我想要无限内部可观察值的。 此图说明了想要的行为:
我有一个组件调用我的服务,如下所示: authservice调用如下所示: 这导致http帖子永远不会被触发,并立即与上面的图像发生错误。如果我删除了switchMap,只返回服务中的可观察值,然后在组件中订阅它,则调用成功。 我错过了什么吗?我对rxjs相对较新,所以我不确定我是否误解了什么,但任何帮助都将不胜感激。 编辑:我还能够将switchMap移动到组件中,做我需要的事情,然后在最后调用
我有一个包含以下列的表格: 表在在线数据库中。我使用dataset.xsd文件和连接字符串在客户端和在线数据库之间进行通信。 以下是我使用的一些方法:
我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我