oizhaolei / electron-material-ui-mongo

MIT License
2 stars 0 forks source link

クエリのCallbackについて #10

Closed y-yabe closed 3 years ago

y-yabe commented 3 years ago

クエリのコードについて質問です。

models, filter, log についてはなんとなくわかるのですが、

callbackについてよくわかりません。

例では以下のようになっていますが、仕様を教えて頂けますでしょうか?

  callback(false, {
    patient: patient ? [patient] : [],
    diseases,
  });
oizhaolei commented 3 years ago

普通の言語なら、例えばJava;

result = longTimeProcess(params);
return result;

でもJavascriptでは、下記は伝統てきな書き方です。

const callback = function(err, data) {
  rpc.sendback(data);
};

longTimeProcess(params, callback);

待つではない、処理Aを出したら、すぐに次の処理Bを進みます。 処理Aが実行終わったら、callbackの形で結末をします。

mdb.tsとipc.tsの最後のメソッドqueryCodeをみてください

      const callback = (err, data) => {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      };
      log.info('run vm:', code, filter);
      vm.runInThisContext(code)({ models, filter, log, callback });
y-yabe commented 3 years ago

例えば、 次のようなテーブル(名前はtest1)があって、

id,name,type id1,name1,type1 id2,name2,type2

id=id1のテーブルだけを検索するスクリプトはどのようになりますか?

以下のように考えたのですが、 「テスト」ボタンを押すと固まってしまいます。

(({ models, filter, log, callback }) => { (async () => { log.info('vm start.', filter); try {

  const test1= await models['test1'].find({
    'id': filter['id1'],
  }).lean();
  callback(false, {
    test1: {
      data: test1,
    },
  });
} catch (e) {
  log.info('e:', e);
  callback(e);
}
log.info('vm end');

})(); })

oizhaolei commented 3 years ago

テーブル:test1

id,name,type
id1,name1,type1
id2,name2,type2

引数:id

コード:

(({ models, filter, log, callback }) => {
  (async () => {
    log.info('vm start.', filter);
    try {
      const criteria = filter['id'] ? {
        'id': filter['id'],
      } : {};

      const test1= await models['test1'].find(criteria).lean();
      callback(false, {
        test1: {
          data: test1,
        },
      });
    } catch (e) {
      log.info('e:', e);
      callback(e);
    }
    log.info('vm end');
  })();
})

20201109の最新版を利用してください。

y-yabe commented 3 years ago

動作確認しました。

Rev.20201109, Windows10