Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js:对象值作为child_process.exec的标准输出_Node.js_Nonblocking_Child Process - Fatal编程技术网

Node.js:对象值作为child_process.exec的标准输出

Node.js:对象值作为child_process.exec的标准输出,node.js,nonblocking,child-process,Node.js,Nonblocking,Child Process,我对Node还不熟悉,在它的一些非阻塞元素上结结巴巴。我试图创建一个对象,其中一个元素是返回child_process.exec标准输出的函数,如下所示: var exec = require('child_process').exec; var myObj = {}; myObj.list = function(){ var result; exec("ls -al", function (error, stdout, stderr) { result = stdout;

我对Node还不熟悉,在它的一些非阻塞元素上结结巴巴。我试图创建一个对象,其中一个元素是返回child_process.exec标准输出的函数,如下所示:

var exec = require('child_process').exec;
var myObj = {};

myObj.list = function(){
  var result;
  exec("ls -al", function (error, stdout, stderr) {
     result = stdout;
  });
  return result;
}
console.log('Ta da : '+myObj.list);

我认为
myObj.list
在设置为
stdout
之前会返回
result
,但我不知道如何让它等待或回调。谢谢你的帮助

您不能直接返回该值,因为它暂时不可用。因此,您需要使用回调,而不是返回值,这意味着将调用代码从内向外翻转一点

var exec = require('child_process').exec;
var myObj = {};

myObj.list = function(callback){
  var result;
  exec("ls -al", function (error, stdout, stderr) {
     callback(stdout);
  });
  // No return at all!
}
// Instead of taking a return we pass a callback
// which receives the value and carries on our computation.
myObj.list(function (stdout) {
   console.log('Ta da : '+ stdout);
});

在实际代码中,您可能希望回调函数将错误作为其第一个参数,您不必这样做,但这是Node.JS中的正常操作方式。

您不能直接返回值,因为它在一点时间内都不可用。因此,您需要使用回调,而不是返回值,这意味着将调用代码从内向外翻转一点

var exec = require('child_process').exec;
var myObj = {};

myObj.list = function(callback){
  var result;
  exec("ls -al", function (error, stdout, stderr) {
     callback(stdout);
  });
  // No return at all!
}
// Instead of taking a return we pass a callback
// which receives the value and carries on our computation.
myObj.list(function (stdout) {
   console.log('Ta da : '+ stdout);
});

在实际代码中,您可能希望回调函数将错误作为其第一个参数,您不必这样做,但这是Node.JS中的正常操作方式。

您是一个明星,谢谢!我特别感谢你的解释,我现在明白多了@DexCurl如何执行命令“不只是读取结果”,比如windows的“退出”。您是明星,谢谢!我特别感谢你的解释,我现在明白多了@DexCurl如何执行命令“不仅读取结果”,如windows的“退出”。