2013-03-05 58 views
0

我有一個node.js應用程序使用async一個接一個地調用方法。出於某種原因,當我嘗試去瀑布的第二層,我的應用程序將引發以下錯誤:「對象不是函數」錯誤?

TypeError: object is not a function

我有下面的代碼是CoffeeScript的(如果有人想它,我可以得到的JavaScript):

async.waterfall([ 
    (callback) => 
     console.log 'call getSurveyTitle' 
     @getSurveyTitle (surveyTitle) => 
      fileName = 'Results_' + surveyTitle + '_' + dateString + '.csv' 
      filePath = path.resolve process.env.PWD, 'static', @tempDir, fileName 
      csv.to(fs.createWriteStream(filePath)) 
      callback(null, null) 
    , 
    (callback) => 
     @createHeaderRow (headerRow) => 
      headerText = _.map headerRow, (row) => 
       row.text 
      csv.write headerText 
      console.log 'before' #gets here and then throws error 
      callback(null,headerRow) 
    , 
    (headerRow, callback) => 
     console.log 'after' 
     @createRows headerRow, (callback) => 
      callback(null,null) 
    ], (err, result) => 
     console.log "waterfall done!" 
    ) 

對節點和異步我還是比較新的,所以我有一種感覺,我只是忽略了一些明顯的東西。任何人都可以看到我在做什麼,可能會導致此錯誤?

回答

4

對於waterfall,第一error後的任何callback參數將被傳遞到下一個任務,包括null S:

async.waterfall([ 
    (callback) => 
     callback(null, null, null) 
    , 
    (callback) => 
     console.log callback # null 
     console.log arguments # { 0: null, 1: null, 2: [Function], length: 3 } 
]) 

如果你不想傳遞到下一個任務的任何值,只需調用callback只用error說法:

callback(null) 

還是爲第一個參數,以便callback設置一個名稱爲第二:

(_, callback) => 
    @createHeaderRow (headerRow) => 
     # ... 
+0

真棒謝謝你!那麼發生的事情是,第二層是否收到一個空參數,什麼時候它根本沒有收到任何參數? – 2013-03-05 17:43:18

+0

@AbeMiessler那麼,「*應*」取決於你。但是,是的,它收到了一個目前沒有預料到的'空'參數。 – 2013-03-05 17:45:14

相關問題