gpt4 book ai didi

asynchronous - 在 Meteor.call 回调中对 sys.exec 的 Meteor 回调

转载 作者:行者123 更新时间:2023-12-05 00:27:24 25 4
gpt4 key购买 nike

我有一个事件触发 Metor.call() :

Meteor.call("runCode", myCode, function(err, response) {
Session.set('code', response);
console.log(response);
});

但是我的 runCode服务器内部的函数 Metheor.methods它里面也有一个回调,我找不到办法让它返回一些东西给 response在上面的代码中。
runCode: function(myCode) {
var command = 'pwd';

child = exec(command, function(error, stdout, stderr) {
console.log(stdout.toString());
console.log(stderr.toString());

// I Want to return stdout.toString()
// returning here causes undefined because runCode doesn't actually return
});

// I can't really return here because I don't have yet the valuer of stdout.toString();
}

我想要一种方法来拥有 exec回调返回的东西为 runCode没有 setInterval这会起作用,但在我看来是一种hacky方式。

最佳答案

您应该使用来自 Fiber 的 Future。

请参阅此处的文档:https://npmjs.org/package/fibers

本质上,你想要做的是等到一些异步代码运行,然后以过程方式返回它的结果,这正是 Future 所做的。

您将在此处了解更多信息:https://www.eventedmind.com/feed/Ww3rQrHJo8FLgK7FF

最后,您可能希望使用此包提供的异步实用程序:https://github.com/arunoda/meteor-npm ,它会让你的喜欢更容易。

// load future from fibers
var Future=Npm.require("fibers/future");
// load exec
var exec=Npm.require("child_process").exec;

Meteor.methods({
runCode:function(myCode){
// this method call won't return immediately, it will wait for the
// asynchronous code to finish, so we call unblock to allow this client
// to queue other method calls (see Meteor docs)
this.unblock();
var future=new Future();
var command=myCode;
exec(command,function(error,stdout,stderr){
if(error){
console.log(error);
throw new Meteor.Error(500,command+" failed");
}
future.return(stdout.toString());
});
return future.wait();
}
});

关于asynchronous - 在 Meteor.call 回调中对 sys.exec 的 Meteor 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20753637/

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