专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2024-10-20 04:06:52 博客文章 10 ℃ 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

})

})

}

至此,投票小程序完成。

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表