“对象不是函数”错误?

时间:2013-03-05 17:37:47

标签: javascript node.js coffeescript

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

  

TypeError:object不是函数

我有以下代码是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!"
    )

我对节点和异步相当新,所以我有一种感觉,我只是忽略了一些明显的东西。任何人都可以看到我在做什么可能会导致此错误吗?

1 个答案:

答案 0 :(得分:4)

对于waterfall,第一个callback之后的任何error参数都将传递给下一个任务,包括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) =>
        # ...