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

2023-12-14 14:41:29

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://blog.csdn.net/xy2937131682/article/details/134992302
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。