首页 > 代码库 > 避免多层回调,Node.js异步库Async使用(series)

避免多层回调,Node.js异步库Async使用(series)

未使用Async之前coffeescript写的代码:

exports.product_file_add = (req,res) ->  if !req.param(‘file_id‘)    return res.json({‘flag‘:‘error‘,‘msg‘:‘请先上传文件再保存!‘})  file_type = req.param(‘file_type‘)  #判断产品和文件类型,限制上传的数量  params = {}  params.product_code = req.param(‘product_code‘)  params.file_type = file_type  ProductFile.count params,(err,count) ->    if count>0      return res.json({‘flag‘:‘error‘,‘msg‘:‘该产品的文件已存在!‘})    product_file = new ProductFile    product_file.add req,(err)->      if err        resErr(res,err)      else        res.json({‘flag‘:‘success‘})

使用Async之后coffeescript写的代码:

exports.product_file_add = (req,res) ->  if !req.param(‘file_id‘)    return res.json({‘flag‘:‘error‘,‘msg‘:‘请先上传文件再保存!‘})  async.series([    (cb)->      #判断产品和文件类型,限制上传的数量      params = {}      params.product_code = req.param(‘product_code‘)      params.file_type = file_type      ProductFile.count params,(err,count) ->        if count>0          cb(‘该产品的文件已存在!‘)        else          cb(null)    (cb)->      product_file = new ProductFile      product_file.add req,(err)->        if err          cb(err)        else          cb(null)  ],  (err,results)->    if err      return res.json({‘flag‘:‘error‘,‘msg‘:err})    res.json({‘flag‘:‘success‘})  )

 

 

  当然这里的代码嵌套不深,不太能看不进出使用Async的好处。

 

  Aysnc.series,串行执行每一个异步回调的函数

  

  依次执行一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。
  如果任何一个函数向它的回调函数中传了一个error,则后面的函数都不会被执行,并且将会立刻会将该error以及已经执行了的函数的结果,传给series中最后那个callback。
  当所有的函数执行完后(没有出错),则会把每个函数传给其回调函数的结果合并为一个数组,传给series最后的那个callback。
  还可以json的形式来提供tasks。每一个属性都会被当作函数来执行,并且结果也会以json形式传给series最后的那个callback。这种方式可读性更高一些。这段话来源于(http://www.verydemo.com/demo_c441_i206465.html)