zoukankan      html  css  js  c++  java
  • 避免多层回调,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的好处。

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

      

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

  • 相关阅读:
    狗蛋带仨妞【Beta】Scrum meeting 1
    实验九 团队作业5:团队项目编码与Alpha冲刺
    狗蛋带仨妞【Alpha】Scrum meeting 7
    狗蛋带仨妞【Alpha】Scrum meeting 6
    狗蛋带仨妞【Alpha】Scrum meeting 5
    狗蛋带仨妞 【Alpha】Scrum meeting 1-4
    Rosetta中准备配体的参数文件
    pymol安装
    chemshell的creation之后
    关于KIE的一点认识
  • 原文地址:https://www.cnblogs.com/luxh/p/3812256.html
Copyright © 2011-2022 走看看