如何在 Node 的嵌套函数中使用回调?
How do I use a callback in a nested function in Node?
我收到 "TypeError: callback is not a function" 这让我相信我误解了如何在嵌套函数中使用回调。
函数:
function getAudioInfo(filePath, callback) {
ffprobe(filePath, { path: ffprobeStatic.path }, function (err, info) {
console.log("ffprobe output: " + JSON.stringify(info));
if (err) {
console.log("getAudioInfo error: " + err);
callback(err, null);
} else {
callback(null, info);
}
});
}
通话:
function checkAudioInfo(metadata_json, callback) {
var filePath = metadata_json['current_path'];
getAudioInfo(filePath, function(err, info) {
if (err) {
callback(err);
}
//operations on info
callback(null, metadata_json);
});//end getAudioInfo
}//end checkAudioInfo
这是对回调的不当使用吗?
编辑:
在传递给包装 checkAudioInfo 的函数时发现错误(另一个回调错误)。我将很快进行编辑并 post 正确的代码。你所有的问题都帮助我找到了答案。谢谢!
您的第一个代码块接受回调。第二个参数应该是一个函数。异步代码完成后将调用此函数。
您的第二个代码块调用了第一个代码块中的函数。您传递的第二个参数是一个函数。到目前为止,还不错。
在该函数内,您尝试调用 callback
。这失败了,因为范围内没有具有该名称的变量。
目前还不清楚您要做什么。您传递的函数 是 回调。您应该使用它对第一个代码块中的代码传递的数据进行一些有用的事情。
现在,您可以使用命名函数表达式获取对回调函数的引用:
getAudioInfo(filePath, function callback (err, info) {
if (err) {
callback(err);
}
//operations on info
callback(null, metadata_json);
});//end getAudioInfo
…但是你只是递归和无限地调用它,这是没有用的。
重新编辑:
您现在已经添加了一个名为 callback
:
的 second 变量
function checkAudioInfo(metadata_json, callback) {
这更有意义。
如果 that callback
未定义,那是因为你在 调用 时没有传递值checkAudioInfo
。您还没有包含该代码。
函数本身 function(err, info)
是在 getAudioInfo
!
内部调用的回调
什么是metadata_json
?你是说 info
吗?
我收到 "TypeError: callback is not a function" 这让我相信我误解了如何在嵌套函数中使用回调。
函数:
function getAudioInfo(filePath, callback) {
ffprobe(filePath, { path: ffprobeStatic.path }, function (err, info) {
console.log("ffprobe output: " + JSON.stringify(info));
if (err) {
console.log("getAudioInfo error: " + err);
callback(err, null);
} else {
callback(null, info);
}
});
}
通话:
function checkAudioInfo(metadata_json, callback) {
var filePath = metadata_json['current_path'];
getAudioInfo(filePath, function(err, info) {
if (err) {
callback(err);
}
//operations on info
callback(null, metadata_json);
});//end getAudioInfo
}//end checkAudioInfo
这是对回调的不当使用吗?
编辑:
在传递给包装 checkAudioInfo 的函数时发现错误(另一个回调错误)。我将很快进行编辑并 post 正确的代码。你所有的问题都帮助我找到了答案。谢谢!
您的第一个代码块接受回调。第二个参数应该是一个函数。异步代码完成后将调用此函数。
您的第二个代码块调用了第一个代码块中的函数。您传递的第二个参数是一个函数。到目前为止,还不错。
在该函数内,您尝试调用 callback
。这失败了,因为范围内没有具有该名称的变量。
目前还不清楚您要做什么。您传递的函数 是 回调。您应该使用它对第一个代码块中的代码传递的数据进行一些有用的事情。
现在,您可以使用命名函数表达式获取对回调函数的引用:
getAudioInfo(filePath, function callback (err, info) {
if (err) {
callback(err);
}
//operations on info
callback(null, metadata_json);
});//end getAudioInfo
…但是你只是递归和无限地调用它,这是没有用的。
重新编辑:
您现在已经添加了一个名为 callback
:
function checkAudioInfo(metadata_json, callback) {
这更有意义。
如果 that callback
未定义,那是因为你在 调用 时没有传递值checkAudioInfo
。您还没有包含该代码。
函数本身 function(err, info)
是在 getAudioInfo
!
什么是metadata_json
?你是说 info
吗?