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

标签 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;
  });
  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 中完成事情的正常方式。

关于Node.js:对象值作为 child_process.exec 的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270857/

相关文章:

javascript - Node MySQL 转义 LIKE 语句

sockets - 有人可以给我一个关于非阻塞套接字的 'send'行为的很好的解释吗?

perl,使用 IO::Select 和 IO::Socket::INET 读取阻塞

c# - .NET TcpListener Stop 方法在有子进程时不会停止监听器

node.js - 我可以在子进程中定义 Express 路由吗?

node.js - 可视化来自 winston (node.js) 的错误日志

mysql - 如何在内部连接mysql kubernetes容器与nodejs k8s容器?

linux - 当另一端写入和关闭时,在 epoll 控制的非阻塞套接字上丢失字节

javascript - Node子进程打包Electron App后立即退出

javascript - 使用公钥创建比特币钱包