rxjs-2API调用(浅调用与深调用)

rxjs-2API调用(浅调用与深调用),rxjs,Rxjs,我有两个电话。第一次呼叫和第二次呼叫 第二次通话花费了99%以上的时间,一旦通话结束,我就可以得到我需要的所有信息。但我打第一个电话,这是快速和有限的信息安抚用户 如果第二次呼叫在第一次呼叫之前结束-取消第一次呼叫 我如何做到这一点 let myResult$ = someOperator([ myApiService.call1(), myApiService.call2()]).pipe( //do something after each call completes (twice

我有两个电话。第一次呼叫和第二次呼叫

第二次通话花费了99%以上的时间,一旦通话结束,我就可以得到我需要的所有信息。但我打第一个电话,这是快速和有限的信息安抚用户

如果第二次呼叫在第一次呼叫之前结束-取消第一次呼叫

我如何做到这一点

let myResult$ = someOperator([
myApiService.call1(),
myApiService.call2()]).pipe(
    //do something after each call completes (twice in Total)
);

正如Oles Savluk正确指出的那样:

let myResult$ = merge([
    myApiService.call1(),
    myApiService.call2()
]);
请注意,它会在可观察值中产生两个单独的值。如果在一个值数组中需要两个请求的结果,请使用。 不要忘记订阅/取消订阅
myResult$

编辑:未经测试,但如果您想让其中一个可观察对象处于优势:

let superior$ = myApiService.call1();
let inferior$ = myApiService.call2();
let myResult$ = merge([superior$, inferior$]).pipe(
    takeUntil(superior$)    
);

合并
确保两个被观察者都得到了他们的镜头,他
直到
确保如果上级先到,结果将立即结束。

选项1。
我喜欢Wouter van Koppen的asnwer,但很少有改动:

const long$=myApiService.longOperation().pipe(share())
const short$=myApiService.shortOperation$.pipe(takeUntil(long$))
合并(长$,短$).subscribe(console.log);
share
的使用使得
takeUntil(long$)
merge(long$
将共享同一订阅,从而防止
longOperation
获得两次订阅

选项2。

shortOperation$
.烟斗(
武田(
长管(
点击(x=>{
//运行一些代码
})
)
)
)
.subscribe(console.log);

使用
merge
operator任何我可以给调用2赋予优先级的想法?假设调用2是一个更深入的搜索,但在一些奇怪的情况下它可能返回得更快。然后我想忽略调用1。但是99%的时间调用1会更快。RxJS也有一个解决方案:race操作符:
让myResult$=race([myApiService.call1(),myApiService.call2()])
它将忽略最慢的呼叫,甚至为您清理订阅。race只需要1次-但我正在寻找的是-呼叫1发出,然后呼叫2发出更多信息(原始合并应答),但如果呼叫2在呼叫1之前发出,请不要让呼叫1发出,可能会取消)我知道,我更新了我的答案,使之适合你的具体问题。这个答案似乎有问题——上级电话会被呼叫两次。