gpt4 book ai didi

javascript - meteor 同步执行系统命令

转载 作者:行者123 更新时间:2023-11-30 13:02:44 25 4
gpt4 key购买 nike

我用 C++ 构建了一个简单的模型,我希望 meteor 与之交互。目前,该模型作为命令行运行,一切运行良好,但调用命令行是异步完成的。该模型非常快,因此我不需要将结果放入回调中,而且在此过程中涉及回调会使 meteor 的数据库访问更加复杂,这是我想避免的事情。

所以,我们刚刚进入常规问题:如何在 javascript 中进行异步同步......

我知道这已经使用 node 进行了讨论,这里已经回答了这个主题: node.js execute system command synchronously

这就是说,如何在 meteor 中实际执行/设置它?

我们应该使用 npm 安装包,但是随着 Meteor 改变了它的分发系统,那么让它自己处理 npm 包的方法是什么?看看here看看我在说什么,我一直没能找到关于这个 package.js 的任何相关信息

为了避免安装外部包,我想到了使用Fibers , meteor 内部使用,但仍然:有人有关于如何用它封装异步调用的示例吗?最后但并非最不重要的一点是,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);

最佳答案

你可以使用 future :

function callToEngine(argument) {
var Future = Npm.require('fibers/future');

var fut = new Future();


///do stuff

engine.on('close', function(code)
{
result = JSON.parse(answerBuffer);
console.log('child process exited with code ' + code);
fut.return(result);
});

return fut.wait();
}

然后简单地使用:

var result = callToEngine(argument);

future 将确保 return 只在 fut.return 运行时返回一些东西

有关 Meteor 异步指南中其他设计的更多信息:https://gist.github.com/possibilities/3443021

关于javascript - meteor 同步执行系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com