【小程序 + 雲開發】體重排行榜 上手筆記

前一段時間上線的小程序記錄體重功能運行基本穩定,沒想到還真的有小夥伴們用,並且還熱心的反饋問題,真是感謝,剛剛發佈了一個體重記錄排行榜,記錄一下筆記吧。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

相關文章
相關標籤/搜索