0

非同期を使用してメソッドを次々に呼び出すnode.jsアプリケーションがあります。何らかの理由で、ウォーターフォールの2番目の層に移動しようとすると、アプリケーションは次のエラーをスローします。

TypeError:オブジェクトは関数ではありません

私は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

1 に答える 1

4

の場合waterfallcallback1番目以降の引数はerror、次のタスクに渡されますnull

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)

または、最初の引数に名前を設定して、callback2番目の引数を設定します。

(_, callback) =>
    @createHeaderRow (headerRow) =>
        # ...
于 2013-03-05T17:40:42.517 に答える