Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular RXJS发出第一个结果,然后等待另一个可观察到的结果_Angular_Rxjs - Fatal编程技术网

Angular RXJS发出第一个结果,然后等待另一个可观察到的结果

Angular RXJS发出第一个结果,然后等待另一个可观察到的结果,angular,rxjs,Angular,Rxjs,目前,我有两个可观察到的。一个返回客户端列表,另一个在文本更改时被激发 我想发出客户端的完整结果,然后在用户开始过滤后切换到内部可观察对象 我还试图在正在键入的文本上实现去抖动 我把一些不起作用的东西放在一起试图解释。目前,它只在我开始键入文本时显示客户端 let obs=Observable.fromPromise(this.clientService.getClients()) .map((客户端)=>{ 返回clients.map((c)=>newclient().fromObject(c

目前,我有两个可观察到的。一个返回客户端列表,另一个在文本更改时被激发

我想发出客户端的完整结果,然后在用户开始过滤后切换到内部可观察对象

我还试图在正在键入的文本上实现去抖动

我把一些不起作用的东西放在一起试图解释。目前,它只在我开始键入文本时显示客户端

let obs=Observable.fromPromise(this.clientService.getClients())
.map((客户端)=>{
返回clients.map((c)=>newclient().fromObject(c));
});
this.clients=obs.switchMap((值)=>{
返回this.searchText.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.map((文本)=>{
返回值.filter((c)=>c.isMatch(text));
});
});

您需要将观测值合并在一起:

let obs=Observable.fromPromise(this.clientService.getClients())
.map((客户端)=>{
返回clients.map((c)=>newclient().fromObject(c));
}).share();
let filtered=obs.switchMap((值)=>{
返回this.searchText.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.map((文本)=>{
返回值.filter((c)=>c.isMatch(text));
});
});
this.clients=Observable.merge(obs,filtered);
首先,您需要使用
share
操作符来避免两次获取客户端(请参阅进一步编辑)。然后,您需要从
obs
filtered
获取值。这就是
合并
的目的:

创建一个输出可观察对象,该输出可观察对象并发地发出来自每个给定输入可观察对象的所有值

通过将多个观察值混合到一个观察值中,将它们展平在一起


编辑:在这种特定情况下,
共享
部分是不必要的,因为OP使用承诺作为可观察的来源,承诺不是由订阅触发的,它们是且不需要共享的。但如果你是在处理其他可观察到的源(就像angular
Http
服务的方法一样,你可能需要
share

Wow遗漏了一些非常小的东西!谢谢我刚刚检查了一下,承诺只创建了一次,即使没有共享。即不会多次访问服务器。哦,是的,我不认为这是来自承诺的
,承诺是可以观察到的,所以不需要共享。)e、 的确。。。。