作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 ping 应用程序,它将每个 ping 记录到日志文件中。根据结果,我写入信息或错误条目。
这是 ping 函数:
function pingServer(item){
var monitor = new Monitor({
website: item.url,
interval: interval
});
monitor.on('up', writeInfo);
monitor.on('down', writeError);
}
我想要一个独特的回调函数 writeLog 而不是 writeInfo 和 writeError 函数,但我不知道如何在该回调中传递参数。
所以而不是
function writeInfo(res){
logger.info(getVarLine(res));
}
function writeError(res){
logger.error(getVarLine(res));
}
我想要这样的东西:
function writeLog(res, level){
if (level=='info'){
logger.info(getVarLine(res));
} else {
logger.error(getVarLine(res));
}
}
最佳答案
这里有三个选项:
.bind()
自动将参数添加到回调(从技术上讲,这会创建一个添加该参数的新函数 stub )。.on()
,它接受您的 level
参数,并在调用回调之前将其添加到回调中。.bind()
如果您不依赖于传递到回调中的 this
值,那么您可以使用 .bind()
创建一个新函数,该函数将具有level
参数自动添加到回调参数之前。
// note how the arguments had to be switched here so level was first to match
// up with how .bind() works
function writeLog(level, res){
if (level=='info'){
logger.info(getVarLine(res));
} else {
logger.error(getVarLine(res));
}
}
function pingServer(item){
var monitor = new Monitor({
website: item.url,
interval: interval
});
monitor.on('up', writeLog.bind(null, level));
monitor.on('down', writeLog.bind(null, level));
}
或者,您可以创建自己的包装函数,该函数返回一个函数,但捕获您想要的参数:
function writeLogCallback(level) {
return function(res) {
if (level=='info'){
logger.info(getVarLine(res));
} else {
logger.error(getVarLine(res));
}
}
}
function pingServer(item){
var monitor = new Monitor({
website: item.url,
interval: interval
});
monitor.on('up', writeLogCallback(level));
monitor.on('down', writeLogCallback(level));
}
.on() 的替换
或者,您可以为 monitor.on()
创建一个包装器来捕获您的级别值:
Monitor.prototype.onWithLevel = function(event, level, callback) {
this.on(event, function(res) {
return callback(res, level);
});
}
function writeLog(res, level){
if (level=='info'){
logger.info(getVarLine(res));
} else {
logger.error(getVarLine(res));
}
}
function pingServer(item){
var monitor = new Monitor({
website: item.url,
interval: interval
});
monitor.onWithLevel('up', level, writeLog);
monitor.onWithLevel('down', level, writeLog);
}
关于javascript - 如何将参数传递给回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36069802/
我是一名优秀的程序员,十分优秀!