异步.eachLimit回调未调用错误

时间:2016-06-08 23:10:45

标签: javascript node.js asynchronous

我在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')

1 个答案:

答案 0 :(得分:1)

你有:

if (err) {

在表单提交处理程序的第一行。之后,您确定没有错误。因此,当您检查响应statusCode并尝试回拨错误时,您将使用空值回调。 这就是为什么在最终的回调函数中检查它时不会出错的原因。

尝试从表单提交处理程序回调时创建new Error('Status not OK: ' + res.statusCode)