2016-11-29 4 views
0

電子の非同期LinvoDBデータベースクエリから角度2でrxjs-observableを取得するにはどうすればよいですか?私が観察を宣言するような他の様々な方法を試みた。この他にObservableをクエリから作成する方法は?

getElements(parameters) { 
    Observable.of(elementController.load(parameters)) 
       .subscribe((x) => console.log(x)); // outputs 'undefined' 
    } 

:私は機能にアクセスするためにelectron.remoteを使用レンダラープロセスにおける

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; 
     }); 
}; 

:メインプロセスにおいて

変数として、dbからの結果をマージし、live()としてクエリを設定し、ipc経由でデータを取得します。 私は何が間違っていますか?

答えて

0

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)); 
    } 

これはあなたのためにうまくいきます!

+0

ありがとう、あなたのコードで完璧に働いています。 – Patrick

+0

あなたがこの回答を正しいものとしてマークしていれば、@パトリックをしてください!ありがとうございました! – Jorge

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)); 
} 
関連する問題