使用node.js中的async模块进行数据库的同步操作

遇到的问题在上一篇博客中就说明了,下面这段代码只是为以后做个笔记
exports.monthcount = (req, res) => {
  let result = {status: 0, message: '登录成功'}
  // 月份
  let monthArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  // 每月有多少天
  let dayArray = []
  let date = new Date()
  // 年份
  let year = date.getFullYear()
  // 按月分组的数据
  let array = []
  // 每月各个平台的数据
  let array1 = {}
  // 计算每月有多少天
  for (let i = 0; i < monthArray.length; i++) {
    date.setMonth(monthArray[i])
    date.setDate(0)
    dayArray.push(date.getDate())
  }
  // 使用async模块进行数据库的同步操作
  async.each(monthArray, function (item, calback) {
  // 按月查询数据库
    Source.find({
      date: {
        $gte: new Date(year + '-' + item + '-' + 1),
        $lte: new Date(year + '-' + item + '-' + dayArray[(item - 1)])
      }
    }, (err, data) => {
      if (err) throw err
      let month = item
      // 按月查询的结果赋值给monthData
      let monthData = data
      // 获取平台列表
      Seting.find({}, (err, data) => {
        if (err) throw err
        if (data) {
          let terraceList = data[0].terraceList
          let terraceCount = []
          // 循环查询平台列表中的所有平台所占的数据
          async.each(terraceList, function (item, callback) {
            Source.count({
              terrace: item,
              date: {
                $gte: new Date(year + '-' + month + '-' + 1),
                $lte: new Date(year + '-' + month + '-' + dayArray[(month - 1)])
              }
            }, (err, data) => {
              if (err) throw err
              let obj = {}
              obj[item] = data
              terraceCount.push(obj)
              callback()
            })
          }, function (err) {
          // 接收查询结果
            array1['month' + month] = terraceCount
            array[(item - 1)] = monthData
            calback()
            if (err) throw err
          })
        }
      })
    })
  }, function (err) {
    if (err) throw err
    // 接收查询结果并返回给客户端
    result.data = array
    result.data1 = array1
    res.json(result)
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值