我已经用 C++ 构建了一个简单的模型,我希望流星与之交互。目前该模型作为命令行运行,一切运行良好,但调用命令行是异步完成的。该模型非常快,因此我不需要回调结果,此外在此过程中涉及回调会使流星的数据库访问更加复杂,这是我想避免的。
所以,我们只是遇到了一个常规问题:如何在 javascript 中进行异步同步……</p>
我知道这个已经用node讨论过了,这个话题已经在这里回答了: node.js execute system command synchronously
这就是说,如何在流星中实际执行/设置?
我们应该使用 npm 安装包,但是随着 Meteor 改变了它的分发系统,那么让它自己处理 npm 包的方法是什么?看看这里看看我在说什么,我一直没能找到关于这个 package.js 的任何相关信息
为了避免安装外部包,我想到了使用Fibers,但仍然:有人有关于如何用它封装异步调用的示例吗?最后但并非最不重要的一点是,Fibers 开发人员几乎建议我们不要直接使用 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);