当数据库无数据场景下,代码去重操作时,数据显示为空。

来源:3-11 歌单数据去重

weixin_慕奕锌

2020-08-11

当数据库无数据场景下,代码去重操作时,在云函数getList中;由于playlist数据从URL获得是一直有值的,但此时数据库为空,由于数据库如果为空,变量countResult、total、凡事从数据库调用的值都为空,导致tasks,list.data都为空,会导致无法进入for循环,从而newData无值,向数据库插入数据也会为空,导致一个恶性循环。这是里是缺少一个数据库为空时,的逻辑处理。不知是我的理解出错,还是少写了代码,希望老师回答。
// 云函数入口函数
exports.main = async (event, context) => {
const countResult = await playlistCollection.count()
console.log(“countResult@@” + JSON.stringify(countResult))
const total = countResult.total
console.log(“total@@” + total)
const batchTimes = Math.ceil(total / MAX_LIMIT)
console.log(“batchTimes@@” + batchTimes)
const tasks = []
for (let i = 0; i < batchTimes; i++) {
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
···
···
···
for (let i = 0; i < playlist.length; i++) {
let flag = true
for (let j = 0; j < list.data.length; j++) {
if (playlist[i].id === list.data[j].id) {
flag = false
break
}
if (flag) {
newDate.push(playlist[i])
}
}

写回答

1回答

谢成

2020-08-11

可以看下这段代码的逻辑:

//img1.sycdn.imooc.com/szimg/5f3272d70931260f16360648.jpg

如果数据库中没有数据,那就是list.data = [],这样的话内层for循环就不会执行,所以每一条读取到的playlist的数据都会放到newData中。

0
2
weixin_慕奕锌
提完提问之后发现,是自己少写了一层括号。。然后评论没有追加上,不过老师能很快的做出回答,让我在这个课程中很安心!
2020-08-12
共2条回复

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程