问题很简单:如何让方法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。但我无法正常使用它。我真的需要一些帮助来理解这一点,因为我对反应式编程没有经验,这一切对我来说都很奇怪。
答案 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
}