0

我有一个 node.js 应用程序,它使用async一个接一个地调用方法。出于某种原因,当我尝试进入瀑布的第二层时,我的应用程序抛出以下错误:

TypeError:对象不是函数

我有以下代码是咖啡脚本(如果有人想要,我可以得到 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

对于waterfall,第一个之后的任何callback参数error都将传递给下一个任务,包括nulls:

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)

Or set a name for the 1st argument so callback is 2nd:

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