1

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

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

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

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

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

订阅者得到的结果是未定义的。

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

4

2 回答 2

0
  getData(){
    var arr =[];
    return this.getDataObs().subscribe(rs=>{
      if(rs && rs.length>0) arr = rs;
    });
}
于 2017-10-22T09:18:16.653 回答
0

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

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

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
}
于 2019-02-10T17:18:46.807 回答