当我执行代码时,我不断收到错误“ TypeError:回调不是函数”。
这是相关代码:

exports.isVideo = function(tweetId, callback) {
  client.get('statuses/show/' + tweetId, function(err, tweet, res){
    if(tweet.extended_entities){
        if(tweet.extended_entities.media[0].type === 'video'){
            console.log('true');
            callback(true);
        } else {
            console.log('false');
            callback(false);
        }
    } else {
        console.log('false');
        callback(false);
    }
  });
}


这在另一个文件中(我需要在这个文件的顶部放置第一个文件,这不是错误的原因):

ids.forEach(function(id){
    console.log(id.twitterId);
    twitterConverter.isVideo(id.twitterId, function(boolean){
        if(boolean){
            console.log('do something');
        } else {
            console.log('do nothing');
        }
    });
});


首先,请不要将其标记为重复,因为还有其他标题相似的帖子。我仔细检查了它们,原因通常是没有传递回调函数或传递了太多参数,在这里不是这种情况。

我对Node.js还没有足够的经验,所以也许我忽略了一些显而易见的事情,但是我找不到此代码有什么问题。

client.get()来自this npm软件包。也许错误与此有关?

如果您能在这里帮助我,我将非常高兴。

最佳答案

回调的调用方(在本例中为client.get方法)决定将哪些参数传递给回调。您需要声明您的回调以匹配client.get所说的将传递给回调的内容。您可以为参数指定任意名称(使用的名称无关紧要),但是它们将按client.get决定的顺序获取值。

在这种情况下,client.get使用与function(err, tweet, res)相同的代码来调用回调函数,因此您的callback必须是这样的:

    callback(null,null,true);


代码是:

    exports.isVideo = function(tweetId, callback) {
    client.get('statuses/show/' + tweetId, function(err, tweet, res){
    if(tweet.extended_entities){
    if(tweet.extended_entities.media[0].type === 'video'){
        console.log('true');
        callback(null,null,true);

    } else {
        console.log('false');
        callback(null,null,false);

    }
    } else {
    console.log('false');
    callback(null,null,false);

     }
     });
     }

关于javascript - 错误:回调不是函数(nodejs),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38607942/

10-09 06:39
查看更多