meteor とやり取りしたい単純なモデルを C++ で作成しました。現在、モデルはコマンド ラインとして実行され、すべてがうまく機能していますが、コマンド ラインの呼び出しは非同期で行われます。モデルは非常に高速であるため、結果をコールバックで受け取る必要はありません。また、このプロセスにコールバックを含めると、流星の DB アクセスがより複雑になり、これは避けたいことです。
というわけで、よくある質問です: javascript で何かを非同期同期させるにはどうすればよいでしょうか…</p>
これはノードを使用して議論されていることを知っています。このトピックはすでにここで回答されています: node.js execute system command synchronously
これは、流星内でこれを実際に行う/設定する方法は?
npmを使用してパッケージをインストールする必要がありますが、Meteorが配布システムを変更したため、npmパッケージを単独で処理できるようにする方法は何ですか? ここを見て、私が話していることを確認してください。このpackage.jsに関する関連情報を見つけることができませんでした
外部パッケージのインストールを避けるために、 Meteor によって内部的に使用されているFibersを使用することを考えましたが、それでも非同期呼び出しをカプセル化する方法の例はありますか? 最後になりましたが、Fiber の開発者は、Fiber で直接コーディングするのではなく、Fiber を使用している他のサブツールを使用するようにほとんどアドバイスしていますが、npm パッケージを含める方法に関する質問に戻ります
私のコードは次のようになります(少し簡略化されています):
function callToEngine(argument, callback)
{
var result = null;
var modelPath = "/some/where"
var require = Npm.require;
var spawn = require('child_process').spawn;
var model = spawn(modelPath, []);
var answerBuffer = "";
engine.stdin.write(argument);
engine.stdin.end(); //flush
engine.stdout.on('data', function(data)
{
answerBuffer+=data;
});
engine.stderr.on('data', function(data)
{
console.log('stderr: ' + data);
});
engine.on('close', function(code)
{
result = JSON.parse(answerBuffer);
console.log('child process exited with code ' + code);
callback(result);
});
}
次のようなものが欲しいです:
var result = callToEngine(argument);