我在node.js项目中的以下代码。
async.eachLimit(dbresult, 1, function (record, callback) {
var json = JSON.stringify(record)
var form = new FormData()
form.append('data', json)
form.submit(cfg.server + '/external/api', function (err, res) {
if (err) {
callback(err)
}
if (res.statusCode === 200) {
connection.query('UPDATE selected_photos set synced = 1 WHERE selected_id = "' + record.selected_id + '"', function (err, result) {
if (err) {
console.log(err)
callback(err)
} else {
callback()
}
})
} else {
console.log(res.statusCode)
return callback(err)
}
})
}, function (err) {
// if any of the file processing produced an error, err would equal that error
if (err) {
// One of the iterations produced an error.
// All processing will now stop.
console.log('A share failed to process. Try rerunning the Offline Sync')
process.exit(0)
} else {
console.log('All files have been processed successfully')
process.exit(0)
}
})
}
res.statusCode = 302所以这应该是错误的。但是错误回调永远不会被触发。如何让它触发错误,以便它停止eachLimit并显示
console.log('A share failed to process. Try rerunning the Offline Sync')
答案 0 :(得分:1)
你有:
if (err) {
在表单提交处理程序的第一行。之后,您确定没有错误。因此,当您检查响应statusCode
并尝试回拨错误时,您将使用空值回调。
这就是为什么在最终的回调函数中检查它时不会出错的原因。
尝试从表单提交处理程序回调时创建new Error('Status not OK: ' + res.statusCode)
。