【问题标题】:Convert a stream of Promises into a stream of values将 Promises 流转换为值流
【发布时间】:2015-10-19 19:26:26
【问题描述】:

我对 RxJs 有点陌生,我正在尝试混合 Promise 和 observables 的世界。

这就是我想要的: 我有一个可观察的(称为clickObs),它监听点击并因此询问数据库,产生一个承诺,当数据库查询结束(成功)时解析为一个值。 因此,我的 observable 从点击流中生成了一个 promise 流,而我想要从那个 observable 中生成一个对应的解析值流。

从过去关于 stackoverflow 的问题中,我读到了 deferflatMapmergeAllfromPromise,但我不知道如何表达这四个来解决我的问题。

有什么建议吗?

【问题讨论】:

    标签: promise rxjs


    【解决方案1】:

    您不需要全部四个,只需查看flatMap 或其兄弟flatMapLatest

    clickObs.flatMapLatest(function() {
      //Access the db and return a promis
      return database.query(queryObj);
    })
    .subscribe(function(result) {
      //Result is implicitly flattened out
      /*Do something with the result*/
    });
    

    flatMap 会隐式地将 promise 或类似数组的对象转换为 Observable 并将结果序列展平。 FlatMapLatest 类似,但如果新事件在前一个事件完成之前到达,则会忽略旧事件。

    【讨论】:

    • 是的,这行得通,谢谢。我同意在我的用例中“flatMapLatest”是要走的路。
    • 对于那些喜欢进一步阅读的人,偶然发现了那篇文章,它很好地解释了这个确切的案例:gist.github.com/staltz/868e7e9bc2a7b8c1f754
    • 请注意,忽略旧事件而不是取消它们通常是不合适的,通常最好明确指定 dispose 的工作方式,而不是在适用的情况下返回一个 Promise。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2010-10-19
    • 2021-07-04
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多