- 需求的场景描述(希望解决的问题)
您好,我们在读云数据库中某个集合的所有记录(我们的例子集合的记录有60条)时,发现求集合总数的代码段 总是 在 实际循环读取记录(云平台规定每次只能读20条记录)的后面,这样就使得计算读多少次失去了意义;另外发现循环读的时候,skip(0)报错误,代码如下。
const db1 = wx.cloud.database()
const MAX_LIMIT = 20
// 先取出集合记录总数
db1.collection('BSDX3S1D1KZC').count().then(res => {
this.setData({
wordnum1: res.total
}),
console.log(res.total)
})
wordnum = this.data.wordnum1
// 计算需分几次取
const batchTimes = Math.ceil(wordnum / MAX_LIMIT)
//读取第一个20条记录
db1.collection('BSDX3S1D1KZC').get({
success: res => {
// res.data 包含该记录的数据
console.log(res)
},
fail: err => {
cosole.log(err)
}
})
//循环读取第2~3个 20条记录
for (let i = 1; i < 3; i++) { //3应该为batchTimes
var skipnum = i * MAX_LIMIT
db1.collection('BSDX3S1D1KZC').skip(skipnum)
.get({
success: res => {
// res.data 包含该记录的数据
console.log(res)
},
fail: err => {
cosole.log(err)
}
})
}
- 希望提供的能力
请问,
1 怎样才能使得"先取出集合记录总数"的代码 在 “读取第一个20条记录”,和“循环读取第2~3个 20条记录” 的代码 之前 执行,这样保证循环数 batchTimes能够提前算出来?
2 怎样防止skip(0)出错,使得 “读取第一个20条记录”,和“循环读取第2~3个 20条记录” 的代码能合并在一个循环里?
可以把计算和下面的操作都放到一个方法里,然后在获取总条数之后调用,
db1.collection('BSDX3S1D1KZC').skip(0).limit(20).get(),这里的skip不能为0,如果想取前20条,可以直接db1.collection('BSDX3S1D1KZC').limit(20).get()这样取就好了,在循环里加个if判断如果i==1的话执行db1.collection('BSDX3S1D1KZC').limit(20).get()如果不等于1就执行db1.collection('BSDX3S1D1KZC').skip(skipnum).limit(20).get()
多谢!
谢谢您帮助。试验
db1.collection('BSDX3S1D1KZC').skip(0).limit(60).get()
.then(console.log)
.catch(console.error)
提示:
VM1004:1 thirdScriptError
errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided;at pages/WordTest/WordTest page lifeCycleMethod onLoad function
Error: errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided
at new t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:14994)
at Object.i [as assertRequiredParam] (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:13547)
at t.e.skip (http://127.0.0.1:45447/appservice/__dev__/WAService.js:21:9208)
at t.onLoad (http://127.0.0.1:45447/appservice/pages/WordTest/WordTest.js:157:40)
at t.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:13907)
at $t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:30369)
at Zt (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:31040)
at sn (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:469)
at Function.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:3006)
at L.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:1500)
如果将skip(0)修改为skip(1),即
db1.collection('BSDX3S1D1KZC').skip(1).limit(60).get()
.then(console.log)
.catch(console.error)
读出来的 只有20条记录,无法全读出
{data: Array(20), errMsg: "collection.get:ok"}
请您再帮助看下,谢谢!
db1.collection('BSDX3S1D1KZC').skip(0).
limit(60).get()一次全部读出来就可以了
谢谢您帮助。试验
db1.collection('BSDX3S1D1KZC').skip(0).limit(60).get()
.then(console.log)
.catch(console.error)
提示:
VM1004:1 thirdScriptError
errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided;at pages/WordTest/WordTest page lifeCycleMethod onLoad function
Error: errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided
at new t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:14994)
at Object.i [as assertRequiredParam] (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:13547)
at t.e.skip (http://127.0.0.1:45447/appservice/__dev__/WAService.js:21:9208)
at t.onLoad (http://127.0.0.1:45447/appservice/pages/WordTest/WordTest.js:157:40)
at t.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:13907)
at $t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:30369)
at Zt (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:31040)
at sn (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:469)
at Function.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:3006)
at L.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:1500)
如果将skip(0)修改为skip(1),即
db1.collection('BSDX3S1D1KZC').skip(1).limit(60).get()
.then(console.log)
.catch(console.error)
读出来的 只有20条记录,无法全读出
{data: Array(20), errMsg: "collection.get:ok"}
请您再帮助看下,谢谢!
小程序端的 limit上限是20
云函数的是100
建议一次读用云函数
好的,多谢!
向您请教在前端多次 读取 云数据库的中的集合中的数据时, 可不可以在前端用async /await 的机制来保证各次读取的顺序是 确定的?如果可以,怎样来实现?
云函数可以 小程序端 需要转译 或者 第三方框架