将NeDB find()结果转换为可观察的结果

时间:2017-10-04 11:44:05

标签: javascript observable nedb

问题很简单:如何让方法find()返回一个带有已找到文档的Observable?

如果我使用承诺,一切正常。

getData(){
return new Promise((resolve, reject) => {
  this.db.find({}, (err, docs) => {
    if (err) reject(err);
    resolve(docs);
  });
})
}

但是,如果我尝试使用observable来解决这个问题:

  getDataObs() {
    return new Observable(subscriber => {
      this.db.find({}, (err, docs) => {
        if (err) subscriber.error(err);
        subscriber.next(docs);
      });
    })
  }

订阅者获得的结果未定义。

我遇到了一种创建observables的方法,bindCallback()应该解决这个问题,因为它接受一个回调并返回一个observable。但我无法正常使用它。我真的需要一些帮助来理解这一点,因为我对反应式编程没有经验,这一切对我来说都很奇怪。

2 个答案:

答案 0 :(得分:0)

  getData(){
    var arr =[];
    return this.getDataObs().subscribe(rs=>{
      if(rs && rs.length>0) arr = rs;
    });
}

答案 1 :(得分:0)

我在寻找使用Nedb + Observables的方法时发现了这个问题...

我建议改用bindNodeCallback(),假设this.db是Nedb数据存储区构造函数的结果:

getDataObs() {
   var boundFind = Rx.Observable.bindNodeCallback(this.db.find).bind(this.db);
   return boundFind({}); // will emit docs, if an error occurs it will fail properly
}