大佬教程收集整理的这篇文章主要介绍了JavaScript – 将变量传递给Node.js中的回调,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以首先,我设置我的vars:
var util = require('util'),child = require('child_process'),config = {};
哪个工作不错然后我加载我的配置:
function loadConfig( ) { // Add some code for auto-loading of args config = { "daemons": [ ["Apache","apache2"],["MySQL","mysqld"],["SSH","sshd"] ] }; }
和init调用函数
loadConfig();
之后,我运行我的检查程序.
function getDaemonStatus( ) { for(var i=0; i<config.daemons.length; i++) { child.exec( 'ps ax -o \'%c %P\' | awk \'{if (($2 == 1) && ($1 == "\'' + config.daemons[i][1] + '\'")) print $0}\'',function( error,stdout,stderr ) { console.log(config.daemons[i]); }); } }
我得到的回应是:
undefined undefined undefined
我真的不想使用GLOBAL变量,所以你们可以想办法解决我的问题吗?
谢谢! =]
你的for循环将从0-3看起来,然后当’我’是四时退出,显然.要记住的难点在于,您的exec回调将不会立即运行.一旦进程开始运行,并且在发生的时候,for循环将被完成.
这意味着本质上,您的回调函数运行的三次,您基本上是这样做的:
console.log(config.daemons[4]);
这就是为什么它打印“未定义”.
您需要通过将循环内容包含在匿名的自动执行函数中来捕获新的范围中的“i”值.
function getDaemonStatus( ) { for(var i=0; i<config.daemons.length; i++) { (function(i) { child.exec( 'ps ax -o \'%c %P\' | awk \'{if (($2 == 1) && ($1 == "\'' + config.daemons[i][1] + '\'")) print $0}\'',stderr ) { console.log(config.daemons[i]); }); })(i); } }
另外,我看到你的函数叫做“getDaemonStatus”.只要记住,由于该exec回调是异步的,这也意味着您不能收集每个回调的结果,然后从getDaemonStatus返回它们.相反,您将需要传递一个自己的回调,并从您的exec回调中调用它.
更新
但是请注意,每次迭代的最简单方法是使用forEach,例如.
function getDaemonStatus( ) { config.daemons.forEach(function(daemon,i){ child.exec( 'ps ax -o \'%c %P\' | awk \'{if (($2 == 1) && ($1 == "\'' + daemon[1] + '\'")) print $0}\'',stderr ) { console.log(daemon); }); } }
以上是大佬教程为你收集整理的JavaScript – 将变量传递给Node.js中的回调全部内容,希望文章能够帮你解决JavaScript – 将变量传递给Node.js中的回调所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。