微信小程序雲開發---如何通過雲函數每次最多返回100條的(de)限制 ...
發表時(shí)間:2022-7-26
發布人(rén):融晨科技
浏覽次數:117
看過石頭哥雲開發基礎課的(de)同學肯定都知道(dào),直接在(zài)小程序裏請求數據每次最多隻能返回20條數據,雲函數裏請求數據每次最多隻能返回100條數據,如果想突破這(zhè)個(gè)限制,最好的(de)方式就(jiù)是(shì)做分頁,當然分頁我在(zài)雲開發基礎裏也(yě)有教大(dà)家。但是(shì)限制存在(zài)這(zhè)麽一個(gè)需求,如果我們想一次性的(de)拿到(dào)數據庫裏存的(de)所有數據呢,比如數據庫裏有1000條數據,我們想一下子(zǐ)全部拿到(dào),該怎麽做呢???

一,雲函數突破100條的(de)限制
1-1,突破100條的(de)原理
其實原理和(hé / huò)我們分頁的(de)原理是(shì)一樣的(de),隻不(bù)過我們用for循環做多次請求,然後把這(zhè)多次的(de)請求組合到(dào)一起,然後把組合好的(de)數據一次性全部返回。這(zhè)樣就(jiù)通過一次請求獲取所有數據。
1-2,代碼實現
這(zhè)裏的(de)代碼是(shì)寫在(zài)雲函數裏,操作步驟我都在(zài)注釋裏給大(dà)家寫出(chū)來(lái)。
// 雲函數入口文件
const cloud = require('wx-server-sdk')
// 雲開發環境初始化
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV})
exports.main = async (event, context) => {
const db = cloud.database()
// 1,獲取數據的(de)總個(gè)數
let count = await db.collection('num').count()
count = count.total
// 2,通過for循環做多次請求,并把多次請求的(de)數據放到(dào)一個(gè)數組裏
let all = []
for (let i = 0; i < count; i += 100) { //自己設置每次獲取數據的(de)量
let list = await db.collection('num').skip(i).get()
all = all.concat(list.data);
}
// 3,把組裝好的(de)數據一次性全部返回
return all;
}
1-3,注意事項
雲函數單次返回的(de)數據不(bù)能超過1M,如果需要(yào / yāo)超過1M,則需要(yào / yāo)使用小程序端的(de)數據查詢20條20條的(de)進行組合了(le/liǎo)。所以(yǐ)如果你一次性要(yào / yāo)返回很多數據,可以(yǐ)考慮在(zài)小程序裏直接請求數據庫,然後做20條20條的(de)組裝。
我下面也(yě)會教大(dà)家在(zài)小程序裏做組裝。
二,小程序直接請求數據庫突破20條
2-1,開啓async和(hé / huò)await
原理我們這(zhè)裏不(bù)在(zài)說(shuō)了(le/liǎo),和(hé / huò)上(shàng)面是(shì)一模一樣的(de),隻不(bù)過小程序裏使用await需要(yào / yāo)做下簡單的(de)操作,也(yě)可以(yǐ)去看下我的(de)另外一篇文章。
《小程序裏使用async和(hé / huò)await變異步爲(wéi / wèi)同步,解決回調地(dì / de)獄問題》
2-2,權限修改
小程序裏直接獲取數據庫裏的(de)數據,記得要(yào / yāo)把集合的(de)權限改一下