我有一个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!"
)
我对节点和异步相当新,所以我有一种感觉,我只是忽略了一些明显的东西。任何人都可以看到我在做什么可能会导致此错误吗?
答案 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) =>
# ...