【发布时间】:2019-02-08 14:09:57
【问题描述】:
我收到“TypeError:回调不是函数”,这让我相信我误解了如何在嵌套函数中使用回调。
功能:
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 的函数时发现错误(另一个回调错误)。我会尽快进行编辑并发布正确的代码。你所有的问题都帮助我找到了答案。谢谢!
【问题讨论】:
-
在第二段代码中,
callback定义在哪里?这很可能是问题所在。错误指向哪里? -
好电话。我忘了包含一个包装第二段代码的函数。我现在将进行编辑。道歉。
-
我们需要查看
callback的来源,因为显然传递的不是函数。checkAudioInfo是从哪里得到callback的? -
你能指定是哪一行导致了错误吗?有两个地方使用了“回调”,这可能会造成混淆。
-
如果我将
ffprobe替换为代理,我将无法重现该问题。我确实收到了关于ffprobeStatic.path未定义的错误,但在将其更改为 null 后,一切正常。所以我认为问题不在于显示的代码。如果您不喜欢使用 node.js 样式的回调,可以使用util.promifisy将它们转换为 Promise,从而缩短整个链条。
标签: javascript node.js asynchronous callback ffprobe