首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS5 Mongo问题

RxJS5 Mongo问题
EN

Stack Overflow用户
提问于 2016-06-19 02:39:14
回答 1查看 255关注 0票数 0

我有一些使用mongo执行查询的RxJS代码。在RxJS v4中工作很好,但是当我迁移到v.5时,我遇到了一些问题。

以下是一些简化的代码:

代码语言:javascript
复制
// Get a mongo connection
getDb() {
  var connect = Rx.Observable.bindNodeCallback(mongodb.connect)
  return connect(this.options.connection.uri, this.options.connection.options)
}

// Query
return getDb()
  .flatMap((db) => {
    var c = db.collection('foo')
    var obs = Rx.Observable.bindNodeCallback(c.insertMany, c)
    return obs(docs)
  })
  .subscribe(...)

每次我尝试某种查询时,都会出现各种错误。所有错误都与蒙戈代码中不存在的options对象相关。我认为这可能是一个背景问题,但我不确定。

上面的查询会产生(在代码中,未定义的是mongo集合选项对象)

代码语言:javascript
复制
Uncaught TypeError: Cannot read property 'serializeFunctions' of undefined
at BoundNodeCallbackObservable.Collection.insertMany[as callbackFunc](node_modules / mongodb / lib / collection.js: 482: 74)

类似的查询结果如下:

代码语言:javascript
复制
TypeError: Cannot read property 'options' of undefined
at BoundNodeCallbackObservable.Collection.remove[as callbackFunc](node_modules / mongodb / lib / collection.js: 1223: 12)

当我手动包装时,更新会正常工作:

代码语言:javascript
复制
var obs = Rx.Observable.create(function(observer) {
   c.insertMany(docs, function(err, res) {
     if (err) { observer.error(err) } else {
       observer.next(res);
       observer.complet();
      }
    })
  })
  return obs

 // This doesn't:
 var obs = Rx.Observable.bindNodeCallback(c.insertMany, c)
 return obs(docs)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-19 05:47:43

好的。事实证明,bindNodeCallbackbindCallback不允许传递上下文。所以我们需要这样做:

代码语言:javascript
复制
c.insertMany = c.insertMany.bind(c)
var obs = Rx.Observable.bindNodeCallback(c.insertMany)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37903474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档