微信小程序云開發---如何通過云函數每次最多返回100條的限制 ...
發表時間:2022-7-26
發布人:葵宇科技
瀏覽次數:50
看過石頭哥云開發基礎課的同學肯定都知道,直接在小程序里請求數據每次最多只能返回20條數據,云函數里請求數據每次最多只能返回100條數據,如果想突破這個限制,最好的方式就是做分頁,當然分頁我在云開發基礎里也有教大家。但是限制存在這么一個需求,如果我們想一次性的拿到數據庫里存的所有數據呢,比如數據庫里有1000條數據,我們想一下子全部拿到,該怎么做呢???

今天就來教大家如何通過云函數每次最多返回100條的限制。
一,云函數突破100條的限制
如上圖所示,我的num集合里有103條數據,如果按照之前的分頁思路,就是分兩次請求,第一次請求1-100條,第二次請求101-103條。這樣我們雖然是可以拿到103條數據,但是要做兩次請求,我們該如何做,才能一次請求就可以獲取這103條數據呢。
1-1,突破100條的原理
其實原理和我們分頁的原理是一樣的,只不過我們用for循環做多次請求,然后把這多次的請求組合到一起,然后把組合好的數據一次性全部返回。這樣就通過一次請求獲取所有數據。
1-2,代碼實現
這里的代碼是寫在云函數里,操作步驟我都在注釋里給大家寫出來。
如上圖所示,我們只需要通過三個步驟,就可以拿到所有的103條數據了。
這樣我們就可以通過一次請求,獲取所有的數據了。是不是感覺很簡單。這里把代碼貼出來給到大家。
// 云函數入口文件
const cloud = require('wx-server-sdk')
// 云開發環境初始化
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV})
exports.main = async (event, context) => {
const db = cloud.database()
// 1,獲取數據的總個數
let count = await db.collection('num').count()
count = count.total
// 2,通過for循環做多次請求,并把多次請求的數據放到一個數組里
let all = []
for (let i = 0; i < count; i += 100) { //自己設置每次獲取數據的量
let list = await db.collection('num').skip(i).get()
all = all.concat(list.data);
}
// 3,把組裝好的數據一次性全部返回
return all;
}
1-3,注意事項
云函數單次返回的數據不能超過1M,如果需要超過1M,則需要使用小程序端的數據查詢20條20條的進行組合了。所以如果你一次性要返回很多數據,可以考慮在小程序里直接請求數據庫,然后做20條20條的組裝。
我下面也會教大家在小程序里做組裝。
二,小程序直接請求數據庫突破20條
2-1,開啟async和await
原理我們這里不在說了,和上面是一模一樣的,只不過小程序里使用await需要做下簡單的操作,也可以去看下我的另外一篇文章。
《小程序里使用async和await變異步為同步,解決回調地獄問題》
現在最新版本的小程序開發者工具好像已經支持async和await方法了,好像不勾選增強編譯也沒事。但是安全起見,還是勾選下增強編譯比較好。
2-2,權限修改
小程序里直接獲取數據庫里的數據,記得要把集合的權限改一下
2-3,代碼實現
細心的同學肯定可以看出來,上面的代碼和我們云函數里的代碼基本上一模一樣的。
到這里我們就完美的突破了小程序的限制,返回我們想要的任何個數的數據了。