如何从电子异步LinvoDB数据库查询中获取角度2中的rxjs-observable?
在主要过程中:
exports.load = function(parameters){
var l = parseInt(parameters.l);
var t = parseInt(parameters.t);
var r = parseInt(parameters.r);
var b = parseInt(parameters.b);
return cmelement.find({
$or: [
{$and: [{x0: { $gt: l, $lt: r }}, {y0: { $gt: t, $lt: b }}]},
{$and: [{x1: { $gt: l, $lt: r }}, {y1: { $gt: t, $lt: b }}]}
]
}).filter(function(x){ return x !== undefined })
.exec(function (err, doc) {
console.log(doc); // outputs the correct data
return doc;
});
};
在渲染器过程中,我使用electron.remote来访问函数:
getElements(parameters) {
Observable.of(elementController.load(parameters))
.subscribe((x) => console.log(x)); // outputs 'undefined'
}
除此之外,我尝试了各种其他方法,例如将observable声明为变量并合并db的结果,将查询设置为live(),通过ipc获取数据。 我做错了什么?
答案 0 :(得分:0)
我无法测试它,但会假设这样:
exports.load = function(parameters, subject){
var l = parseInt(parameters.l);
var t = parseInt(parameters.t);
var r = parseInt(parameters.r);
var b = parseInt(parameters.b);
return cmelement.find({
$or: [
{$and: [{x0: { $gt: l, $lt: r }}, {y0: { $gt: t, $lt: b }}]},
{$and: [{x1: { $gt: l, $lt: r }}, {y1: { $gt: t, $lt: b }}]}
]
}).filter(function(x){ return x !== undefined })
.exec(function (err, doc) {
console.log(doc); // outputs the correct data
// fire your subject here .. !
subject && subject.next && subject.next(doc) && subject.complete();
return doc;
});
};
getElements(parameters) {
const subj = new Subject<any /* or your type.. */>();
elementController.load(parameters, subj);
// return your subject here or subscribe to it..
subj.subscribe(doc => console.log(doc));
}
答案 1 :(得分:0)
您可以将整个load函数包装为返回Observable:
exports.load = function(parameters){
return Observable.create(observer => {
var l = parseInt(parameters.l);
var t = parseInt(parameters.t);
var r = parseInt(parameters.r);
var b = parseInt(parameters.b);
return cmelement.find({
$or: [
{$and: [{x0: { $gt: l, $lt: r }}, {y0: { $gt: t, $lt: b }}]},
{$and: [{x1: { $gt: l, $lt: r }}, {y1: { $gt: t, $lt: b }}]}
]
}).filter(function(x){ return x !== undefined })
.exec(function (err, doc) {
console.log(doc); // outputs the correct data
observer.next(doc);
observer.complete();
});
});
};
然后在你的getElements函数中:
getElements(parameters) {
elementController.load(parameters)
.subscribe((x) => console.log(x));
}
希望这适合你!