2016-07-27 78 views
0

當我執行我的代碼時,我不斷收到錯誤'TypeError:callback不是函數'。
這是相關代碼:錯誤:回調不是函數(nodejs)

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'); 
     } 
    }); 
}); 

首先,請不要將其標記爲重複,因爲其他帖子的標題類似。我仔細觀察了它們,原因通常是沒有傳遞迴調函數,或者傳遞了太多的參數,這裏不是這種情況。

我對nodejs還沒有那麼有經驗,所以也許我忽略了一些明顯的東西,但是我找不到這個代碼有什麼問題。

client.get()this npm包。也許這個錯誤與此有關?

如果你能在這裏幫助我,我會非常高興。

+0

嘗試記錄'typeof callback'?可能會給你一個提示。你的代碼對我來說看起來很好。你確定你沒有在沒有回調的情況下在別的地方調用該函數嗎? – otajor

+0

typeof callback返回未定義。這很奇怪,我真的不知道它爲什麼不返回函數。 – eRodY

+0

你已經在client.get()的回調中處理'err'了嗎? 也許有一些錯誤,你的'回調'沒有執行,並被視爲不作爲回調函數? – Carr

回答

1

回調的調用者(在本例中爲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); 

    } 
    }); 
    }