将变量传递到node.js函数中
Pass variables into node.js function
我正试图将一个额外的变量(设备名)传递到session.pingHost中,这样只有在ping返回响应后,我才能运行另一个需要该变量的函数(someOtherFunction)。当前someOtherFunction接收未定义的设备名称。
我该如何做到这一点?有更好的方法吗?
var ping = require("net-ping");
var pingresult = '';
pingDevice('xxx.xxx.xxx.xxx', 'My Device');
function pingDevice(ipaddress, devicename){
var options = {
retries: 1,
timeout: 2000
};
var session = ping.createSession (options);
session.pingHost (ipaddress, function (error, target) {
if (error) {
console.log (target + ": ping FAIL");
pingresult = '0';
} else {
console.log (target + ": ping OK");
pingresult = '1';
}
someOtherFunction(pingresult,devicename);
});
}
使用回调是对pingDevice
(包含devicename
参数)调用上下文的闭包这一事实来执行此操作的方式完全是标准的、正常的做法。你可以做你正在做的事情,给定显示的代码,这就是我要做的
另一种方法是使用Function#bind
:
session.pingHost (ipaddress, function (devicename, error, target) {
// ------------------------------------^^^^^^^^^^
if (error) {
console.log (target + ": ping FAIL");
pingresult = '0';
} else {
console.log (target + ": ping OK");
pingresult = '1';
}
someOtherFunction(pingresult,devicename);
}.bind(null, devicename));
//^^^^^^^^^^^^^^^^^^^^^^
Function#bind
创建一个新函数,当被调用时,该函数将使用特定的this
值(我们在这里不使用该值,因此使用null
)和您给bind
的任何参数,然后是调用新函数时使用的参数。
但我认为这里没有任何必要。您需要或想要bind
的唯一真正原因是,您是否希望在创建函数时获取devicename
的值(因为它可能会更改)。
有一个无关的问题:您正成为隐式全局变量的恐怖的牺牲品,因为您没有声明pingresult
变量。一定要在适当的上下文中声明变量。
相关文章:
- 当js函数's已执行
- 调用php数组中的JS函数
- 为JS函数添加延迟
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 使用JS函数来使用另一个函数的语法?node.js
- 将JS函数传递给Emscripten生成的代码
- 是否可以在使用headerphp函数后自动调用JS函数
- 如何在.js函数中检索来自其他模板的表单的目标值
- 简单的JS函数.需要对变量进行澄清
- 无法识别从php创建的Js函数
- 如何将对象传递给这个js函数
- 全局窗口热键在最小化chrome窗口时调用js函数
- 将重定向URL链接添加到JS函数
- 从PHP调用JS函数不起作用
- js函数堆栈传入变量,.hide()不起作用
- 当运行JS函数时,如何在c#中的Edgejs中获取错误文本
- 如何让JS函数自行执行
- 使用默认js函数的javascript中的日期的第二天
- 如何从页面中的jquery调用angular js函数控制器
- 从.js文件调用html中的js函数