【问题标题】:Observables and Sequelize promisesObservables 和 Sequelize Promise
【发布时间】:2017-10-17 01:39:24
【问题描述】:

早上好,

我在理解 Sequelize 和 RxJS 如何协同工作时遇到问题。 根据我的阅读,Sequelize 使用了 Promise。现在,如果我想加载一个列表并在每次在我的数据库中找到一个元素时进行渲染,会发生什么? 我正在使用 sequelize 中的这种语法:

User.findAll().then()

但我想要的是把它包裹在一个 observable 中并能够使用:

var getAllUsersObservable = Rx.Observable.create(function (obs) {
  obs.next(user)
}

然后我的观察者只想打印新用户。

var getAllUsersObserver = {
  next: console.log(user)
}

对我来说,这行不通,因为 Sequelize 只会在找到所有用户后将我所有用户的列表放入它的承诺中。我的问题是:如何同时使用这两个来打印我的用户,一次一个?

提前致谢

【问题讨论】:

  • 不 sequelize 为结果提供某种光标吗?

标签: javascript promise sequelize.js observable


【解决方案1】:

我还没有尝试过,但我确实有同样的问题,稍后会进行调查。但看起来你可以从一个 Promise 中创建一个 Observable 对象。看到这个:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/promises.md

我认为做这样的事情将是混合 Observables 和 Promise 的最佳方式。

let observable1 = Rx.Observable.fromPromise(User.findAll());

observable1.subscribe(...);

您可能需要执行一些其他 RX 操作,例如 Map、SwitchMap 等,但看起来这可能会让您更接近您所追求的。

希望这会有所帮助!

【讨论】:

  • 更新:我正在用 Sequelize 做类似的事情,并成功地将它连接到 RxJS。就这么简单:Rx.Observable.fromPromise(User.findAll()).subscribe(...);您可以使用几乎所有其他 RxJS 方法,因为它们对 Promise 有很好的支持。
【解决方案2】:

非常感谢!由于我是 stackoverflow 的新手,所以我忘了回来解释我是如何解决我的问题的。我会学习更多。

事实证明,Rx.Observable.fromPromise 确实成功了。 但是,我们选择了另一种解决方案,就是使用

Rx.Observable.create(obs => { User.findOrCreate(......).spread((user, 
created) => obs.onNext({whatever}) )}

它现在运行良好。希望这也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多