node.js - Nodejs Exec不执行
问题描述
我正在使用 Nodejs 创建一个测试器模块。所以我需要使用exec。此代码有效并且运行良好:
const { exec } = require('child_process');
var nb_test = 1
var return_array = [nb_test];
var finished = 0;
var i = 0;
while (i < nb_test)
{
var env = { "NB_MALLOC": i.toString()};
console.log("coucou");
console.log(i);
exec("ls", { env }, function (error, stdout, stderr) {
console.log(stdout);
return_array[i] = { stdout, error, stderr };
finished++;
});
i++;
}
但如果我最后有这个,什么都不执行,代码永远不会进入回调
j = 0
while (j < nb_test){}
任何想法为什么?
解决方案
你的回调永远不会运行,因为你永远不会退出当前的事件循环。像你的回调这样的异步操作exec
被搁置在当前循环完成后执行。所以 node 将执行整个脚本中的所有同步代码,只有在这之后它才会开始处理回调。通过在脚本中放置一个永无止境的while
循环,您可以让 Node 无法执行任何回调。while 循环只是旋转,回调耐心地等待它完成。目前尚不清楚您为什么想要最后一个循环,但希望这将帮助您了解它导致的行为。
推荐阅读
- c - 使用 Javascriptcore Glib API 返回本机对象
- node.js - 命令 '/bin/sh -c npm install && npm ls' 返回一个非零代码:1
- regex - 替换 sed 中的“高级”模式
- arrays - 如何在 Swift 中将包含数组的字符串转换为数组?
- java - AES-192-ECB 在 node.js 中加密并在 java 中解密
- javascript - Outlook Office 365 插件:如何在回复中获取消息文本和传入消息?
- php - 我可以遍历一个元素数组,在每次迭代中发出一个 GET 请求,并以某种方式将 GET 结果映射到相应的元素吗?
- php - 如何使 foreach 循环在 php 中只取值?
- angular - Firebase - 权限缺失或不足
- javascript - 创建 dom 对象的可编辑副本