gpt4 book ai didi

javascript - 如何将参数传递给回调

转载 作者:行者123 更新时间:2023-11-28 18:41:05 25 4
gpt4 key购买 nike

我正在编写一个 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));
}
}

最佳答案

这里有三个选项:

  1. 使用 .bind() 自动将参数添加到回调(从技术上讲,这会创建一个添加该参数的新函数 stub )。
  2. 手动创建您自己的包装函数来添加参数。
  3. 创建新版本的 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com