【问题标题】:Conditional Observable chaining in angular 2角度 2 中的条件可观察链接
【发布时间】:2016-09-12 22:07:11
【问题描述】:

我在 Angular 2 中工作,并且正在从服务进行一系列异步调用。一些调用只需要在我的调用链中有条件地进行。 我的初始调用链如下所示:

伪代码

this.post().flatMap( () => this.put() ).flatMap( () => this.get() )..etc.

然后我需要根据变量数组有条件地将额外的异步调用附加到我的链中。

我正在使用这种方法:

伪代码

...flatMap( () => return this.additionalCallsFunction(callArray) )
.flatMap( () => this.finalPostRequest() ).subscribe(...)

additionalCallsFunction(callArray){
  if(callArray.length === 0) return Observable.empty()
  else { return this.get().concatMap( (res) => this.put(res).flatMap( () => { 
    callArray.removefirstItem()
    return this.additionalCallsFunction(callArray)
  }); 
}

我对 Angular 和 Observables 还很陌生,所以我不确定我是否正确地处理了这个问题。无论我的附加调用数组是否为空,我都会看到我的初始调用发生了,但是当我的函数返回时,附加调用和我的最终 Post 请求都不会通过。我的控制台中也没有看到任何错误。我尝试用 .never() 替换 .empty(),但没有任何变化。

任何帮助/建议表示赞赏!

【问题讨论】:

  • 由于我真的不需要 Observables 提供的额外功能,所以我决定使用 toPromise() 方法,并使用 Promise 解决了它。知道我哪里出错了会很整洁。

标签: javascript angular observable chaining


【解决方案1】:

我也遇到了同样的情况,最后我用Observable.of(undefined) 代替了Observable.empty()。 不知道为什么,Observable.empty() 打断了链条。

非常感谢任何进一步的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多