2015-07-10 101 views
-1

我从客户端调用服务器功能,执行UNIX命令并获得服务器上的输出,但我需要将结果返回给调用它的客户端功能。我在服务器上得到输出,但Meteor.call立即返回结果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); 
 
    } 
 
});

回答

1

这个问题每周要问一次。您不能在回调函数中调用返回值。无论是否调用exec的回调,该方法都会在函数结束时返回。这就是异步编程的本质。

您将需要使用exec的同步变体,或以某种其他方式将结果返回给客户端(例如,被动地更新的集合)。

可以例如使用execSynchttps://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options):

return execSync("youtube-dl --get-url " + link); 
相关问题