最后实现“我的”投票页面。该页面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
??????})
????})
??}
至此,投票小程序完成。
发布部署测试下一章开始学。