美文网首页
《微信小程序开发从入门到实战》学习五十一

《微信小程序开发从入门到实战》学习五十一

作者: 阿宅白石 | 来源:发表于2023-12-13 13:39 被阅读0次

4.5 实现投票小程序服务端功能

4.5.4 获取我的投票信息

最后实现“我的”投票页面。该页面pages/myVote/myVote.js还有一个todo,获取用参与的所有投票的列表。这个功能需要用到用户的openid,因此也需要使用云函数来实现。

新建myVoteList云函数。完成代码将其上传至云空间,云函数index.js代码如下:

// 云函数入口文件

const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()

// 云函数入口函数

exports.main = async (event, context) => {

  const wxContext = cloud.getWXContext()

  const openid = wxContext.OPENID // 获取用户的openid

  const countResult = await db.colllection('votes').count()

  const total = countResult.total // 取出集合记录总数

  const MAX_LIMIT = 100 // 一次最多取100条数据

  const batchTimes = Math.ceil(total / MAX_LIMIT) // 计算需要取几次

  let tasks = [] // 保存所有读操作的Promise的数组

  for(let i = 0; i < batchTimes; i++){

    const promise = db.collection('votes').where({

      'voteList.openid': openid // 根据用户的openid筛选数据

    }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()

    tasks.push(promise)

  }

   // 等待所有Promise执行完毕后,将获取的数据合并到一起,然后返回

   // reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值

  return (await Promise.all(tasks)).reduce((acc,cur) => {

    return {

      data: acc.data.concat(cur.data),

      errMsg: acc.errMsg

    }

  })

}

---

接下来完成todo,在pages/myVote/myVote.js文件修改getMyVoteListFromServer方法,代码如下:

  getMyVoteListFromServer() {

    // 当前使用伪造的数据,后面使用云开发技术从服务端获取数据

    wx.cloud.callFunction({

      name: 'myVoteList'

    }).then(res => {

      console.log(res)

      this.setData({

        voteList: res.result.data

      })

    }).catch(res => {

      console.error(res)

      wx.showToast({

        title: '获取数据失败',

        icon: none

      })

    })

  }

至此,投票小程序完成。

发布部署测试下一章开始学。

相关文章

网友评论

      本文标题:《微信小程序开发从入门到实战》学习五十一

      本文链接:https://www.haomeiwen.com/subject/xaibgdtx.html