我使用concatMap连续进行两个API调用,但是仅在选中复选框的情况下才应运行第二个API调用。这是我的代码:
this.myService.createArticle(article)
.pipe(
filter(() => this.checkbox),
concatMap(() => return this.mailer.createOtherResource(data)),
}).subscribe(
(x) => { console.log('OK', x); },
error => console.error('FALLA', error),
() => console.log('Finally I have really reached the END')
);
问题是,如果未选中该复选框,即使第一个可观察的对象未返回错误,也永远不会运行OK函数,只有“最终”函数会运行,我需要它通知用户资源已创建。我该怎么办?
我尝试使用takeWhile
而不是pipe
,并且结果相同。
答案 0 :(得分:1)
您订阅的最后一个回调仅在第二次调用时运行。如果您希望第一个HTTP调用一旦完成就调用方法,请尝试以下方法:
this.myService.createArticle(article)
.pipe(
finalize(() => console.log('Finally I have really reached the END (of the first call)'))
filter(() => this.checkbox),
concatMap(() => return this.mailer.createOtherResource(data)),
}).subscribe(
(x) => { console.log('OK', x); },
error => console.error('FALLA', error),
() => console.log('Finally I have really reached the END')
);
答案 1 :(得分:0)
我不知道您的createOtherResource
函数返回什么,但这是一个Observable吗?
也许您应该尝试以下方法:
this.myService.createArticle(article)
.pipe(
filter(() => this.checkbox),
concatMap(() => of(this.mailer.createOtherResource(data))),
})
.subscribe(
(x) => console.log('OK', x),
error => console.error('FALLA', error),
() => console.log('Finally I have really reached the END')
);