Closed y-yabe closed 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 });
例えば、 次のようなテーブル(名前は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');
})(); })
テーブル: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の最新版を利用してください。
動作確認しました。
Rev.20201109, Windows10
クエリのコードについて質問です。
models, filter, log についてはなんとなくわかるのですが、
callbackについてよくわかりません。
例では以下のようになっていますが、仕様を教えて頂けますでしょうか?