使第一个可观察的链可选

时间:2018-08-22 13:40:06

标签: angular rxjs

我目前有两个API请求,第一个请求进入第二个:

.get('/call1', { })
.pipe(
    switchMap(response => {
        this.api.get('/call2', { })

这很好(尽管有更合适的方法,我很想听听!)。但是,通过对我的应用程序进行了一些最近的更改,我意识到在某些情况下我已经存储了call1的数据,因此可以直接进行第二次调用,但是我不知道该怎么做。在其他情况下,在switchMap中,我做了类似的事情:

if (condition)
    return this.api.get('/call2');
else
    return ObservableOf(cachedData);

如何为链中的第一个电话做类似的事情?

2 个答案:

答案 0 :(得分:1)

您可以在单独的函数中应用条件

def nthterm(first, n, c)
  (1..n).reduce([first]){|memo| memo << memo[-1] + c}
end

该函数可以决定从何处获取数据并返回可观察对象,就像您的示例一样:

getCall1()
.pipe(
    switchMap(response => {
        this.api.get('/call2', { })

答案 1 :(得分:0)

我建议您在API层中使用某种缓存层或数据存储。这样,每次调用“ this.api.get()”时,如果已检索到具有适当值的可观察对象,则可以返回该对象。我们使用最新版本的angular并执行类似的操作,同时使用浏览器的本地存储在API调用后保存值。