在Meteor中延迟从服务器返回变量到客户端函数
Return variable back from server to client function with delay in Meteor
我从客户端调用服务器函数,它执行UNIX命令并在服务器上获得输出,但我需要将结果返回给调用它的客户端函数。我在服务器上得到输出,但是流星。调用立即返回结果undefined, BC exec命令需要一些时间来运行。有什么建议如何延迟获得结果和绕过这个问题?
客户端调用:
if (Meteor.isClient) {
Template.front.events({
'click #buttondl': function () {
if (inputdl.value != '') {
var link = inputdl.value;
Meteor.call('information', link, function(error, result) {
if (error)
console.log(error);
else
console.log(result);
});
}
}
});
}
服务器方法:
Meteor.methods({
information: function (link) {
exec = Npm.require('child_process').exec;
runCommand = function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if(error !== null) {
console.log('exec error: ' + error);
}
return stdout;
}
exec("youtube-dl --get-url " + link, runCommand);
}
});
这个问题每周被问到一次。你不能在回调函数中调用return。无论您的exec
的回调是否被调用,该方法都会在到达函数结束时返回。这就是异步编程的本质。
您要么需要使用exec
的同步变体,要么以其他方式(例如,一个响应式更新的集合)将结果返回给客户端。
你可以使用execSync
(https://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options):
return execSync("youtube-dl --get-url " + link);
相关文章:
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 在app.settings中传递javascript变量(客户端变量到服务器端)
- 如何将 Node.js 环境变量注入客户端 JavaScript
- Django设计模式-在加载时填充客户端JavaScript变量的方法
- 使用NodeJS与客户端共享变量
- 如何在客户端验证中验证两个变量规则
- 在客户端访问服务器变量时获取空字符串
- 流星 在客户端跟踪服务器端变量
- 将变量从 VB 函数传递到客户端 JavaScript
- 将变量从服务器传递到客户端
- 如何从服务器端nodejs访问客户端javascript变量
- 将变量从客户端发送到服务器 |JSON vs POST
- 在客户端上从 Meteor.call 获取未定义,但在服务器上变量包含数据
- 根据客户端变量的状态有条件地启用/禁用 @Html.DropDownListFor
- GWT 客户端代码中的易失性变量
- 将车把变量传递给客户端 js 文件
- WebPack:访问客户端代码中的节点环境变量
- 与服务器上的 Meteor.onCreateUser 函数共享客户端变量
- 我怎么能"保存“;变量客户端,这样我就可以在其他java脚本事件中使用它
- Javascript:使用变量访问服务器端变量客户端