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
})
})
}
至此,投票小程序完成。
发布部署测试下一章开始学。
网友评论