前一段時間上線的小程序記錄體重功能運行基本穩定,沒想到還真的有小夥伴們用,並且還熱心的反饋問題,真是感謝,剛剛發佈了一個體重記錄排行榜,記錄一下筆記吧。html
以前的功能裏沒有儲存用戶信息,只是在分享的時候獲取暱稱和頭像生成圖片,不過排行榜的功能確定是須要的,就建了一個users
的表,在登陸時收集暱稱,若是用戶拒絕也不能影響記錄體重功能的使用。json
Page({
data: {
isAuthorize:'loading' // 是否受權
},
/** * 生命週期函數--監聽頁面加載 */
async onLoad(options) {
let getSetting = promisify(wx.getSetting)
// 是否受權判斷
let isAuthorize = await getSetting().then(res => {
if (res.authSetting['scope.userInfo']) {
this.getInfo()
return true
}else{
return false
}
})
this.setData({isAuthorize})
// 受權經過 執行登陸
isAuthorize ? this.toAddPage() : ''
wx.checkSession({
success (a) {
//session_key 未過時,而且在本生命週期一直有效
},
fail () {
// session_key 已經失效,須要從新執行登陸流程
wx.login() //從新登陸
}
})
},
async bindGetUserInfo(e){
if(e.detail.userInfo == undefined ){
wx.showToast({
icon: 'none',
title: '好氣哦,排行榜數據不能顯示你的暱稱。'
})
setTimeout(()=> {
// 執行登陸
this.toAddPage()
},3000)
}else{
await this.saveName(e.detail.userInfo)
wx.hideLoading()
// 執行登陸
this.toAddPage()
}
},
getInfo(){
wx.getUserInfo({
success: (res) => {
this.saveName(res.userInfo)
}
})
},
// 更新暱稱
saveName(Param){
return new Promise((resolve, reject)=> {
wx.cloud.init()
// 雲函數調用
wx.cloud.callFunction({
name: 'addTest',
data: {
...Param
},
success: res => {
wx.showToast({
title: '暱稱更新成功',
})
resolve(res)
},
fail: err => {
wx.showToast({
icon: 'none',
title: '暱稱更新失敗'
})
reject(err)
}
})
})
},
// 執行登陸
toAddPage(){
wx.cloud.init({})
wx.cloud.callFunction({
name: 'login',
data: {},
success: res => {
app.globalData.openid = res.result.openid
wx.switchTab({
url: '/pages/add/add'
})
},
})
},
複製代碼
特地新建了一張表,用來存排行榜的數據,目前雲開發尚未多表關聯查詢的功能,若是本身匹配挺耗費配額,就弄了一個表存起來數據,天天定時跑出排行榜的數據。 說下流程 一、批量刪除表裏的數據 二、查詢今日簽到信息 三、查詢用戶暱稱 四、儲存信息小程序
主要用async
+ for...of
實現異步串行的讀、存效果,下邊是代碼。session
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const _ = db.command
const moment = require('moment')
// 昨日簽到列表
const getList = () => {
return db.collection('list').where({
// date:'2019-08-03'
date:moment().format('YYYY-MM-DD')
// date:moment().subtract(1, 'days').format('YYYY-MM-DD')
}).get()
}
// 獲取暱稱
const getName = (openId) => {
return db.collection('users').where({
_openid: openId
}).get()
}
// 保存排行榜
const addTopUserInfo = (openId,Param) => {
return db.collection('topList').add({
data: {
_openid: openId,
...Param
}
})
}
// 雲函數入口函數
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
try {
console.log(moment().subtract(1, 'days').format('YYYY-MM-DD'))
// 刪除以前數據
let removeList = await db.collection('topList').where({'_openid':_.neq('123')}).remove()
// 獲取列表數據
let result
await getList().then(res => {
result = res.data
})
console.log(result)
let arr = []
// 循環存儲
for(let item of result) {
await getName(item._openid).then(res => {
res.data.length == 1 ? item.name = res.data[0].nickName : item.name = '匿名用戶'
res.data.length == 1 ? item.url = res.data[0].avatarUrl : item.avatarUrl = '../../images/null.png'
})
}
for(let item of result) {
await addTopUserInfo(item._openid,item).then(res => {
console.log(res,1)
})
}
console.log('end')
return result
}catch(e){
}
}
複製代碼
定時任務在雲函數的描述文件中定義,詳見官方文檔app
{
"triggers": [
{
"name": "myTrigger",
"type": "timer",
"config": "0 0 23 * * * *"
}
]
}
複製代碼
新建排行榜頁面,在頁面中使用,limit
爲指定條數,orderBy
指定排序條件,很簡單了。異步
wx.cloud.init()
const db = wx.cloud.database()
db.collection('topList').limit(100).orderBy('index', 'desc').get({
success: (res) => {
console.log(res)
this.setData({
resault:res.data
})
}
})
複製代碼
歡迎使用,哈哈哈async