请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

数据库没有数据插入playlist

用了更新后的代码,代码没有错误,函数调用也成功,但是为什么数据库playlist一直没有数据的。。。本地测试也是成功

代码:// 云函数入口文件
const cloud = require(‘wx-server-sdk’)

cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database() //云数据初始化
const axios = require(‘axios’)
const URL = ‘https://apis.imooc.com/personalized?icode=838D6B1352803B27

const playlistCollection = db.collection(‘playlist’)
const MAX_LIMIT = 10
// 云函数入口函数
exports.main = async (event, context) => {
//const list = await playlistCollection.get()
const countResult = playlistCollection.count() //该方法返回值是一个对象,且为异步操作
const total = countResult.total //取到该数组的总条数
const batchTimes = Math.ceil(total / MAX_LIMIT) // 计算要取几次,220/100,向上取整取三次,异步操作
const tasks = []
for(let i = 0; i < batchTimes; i++){
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT) //每一次要取多少条
tasks.push(promise)
}

 let list = {
   data: []
 }
if(tasks > 0){       //当Promise执行完所有任务后,将每一次的数据拼接起来。
  list = (await Promise.all(tasks)).reduce((acc,cur)=>{
    return{
      data : acc.data.concat(cur.data)
    }
  })
}



 const { data } =  await axios.get(URL)  //ES6解构赋值,data下得result就是我们想要的数据
 if(data.code >= 1000){
   console.log(data.msg)
   return 0
 }
 const playlist = data.result


 const newData = []                    //去重操作
 for(let i = 0, len1 = playlist.length; i<len1; i++){
   let flag =true //标识符,若为true则id不相同
   for(let j = 0,len2 = list.data.length; j<len2; j++){  //判断数据库中list集合是否包含服务器已经拥有的数据
     if(playlist[i].id === list.data[i].id){
       flag = false
       break
     }
    }
     if(flag){
       let p1 = playlist[i]    //若没有相同的数据,则将数据插入到newData数组中去
       p1.createTime = db.serverDate()
       newData.push(p1)
     }
    }
    console.log(newData)

    if(newData.length > 0){
      await playlistCollection.add({
        data : [...newData]
      }).then((res)=>{
        console.log('插入成功')
      }).catch((res)=>{
        console.log('插入失败')
        console.loh(err)
      })
    }

    return newData.length
  }

图片描述

正在回答 回答被采纳积分+3

1回答

谢成 2021-04-15 09:20:50

需要梳理下这个逻辑,就是如果有新的推荐歌单会插入数据库,如果没有新的推荐歌单数据就不会插入数据库。


所以需要检查下是不是在第一次本地测试的时候,已经把当时那个时间推荐的歌单插入数据库了(歌单不是一直都会有新的),然后再下次测试的时候是不是就没有新的歌单了。

1 回复 有任何疑惑可以回复我~
  • 提问者 慕沐7268204 #1
    是这样 我意思是说第一次插入数据库就已经插入失败了 在小程序端是一条音乐歌单信息都没有的,就云数据库中是没有playlist数据的,
    回复 有任何疑惑可以回复我~ 2021-04-15 12:24:32
  • 提问者 慕沐7268204 #2
    你好 刚才我试了下将playlist JSON对象加到playlist中的js文件中 再调用getplaylist云函数就显示插入成功 但再调用music获取数据做下拉操作那些时,小程序端就什么都显示不出来了
    回复 有任何疑惑可以回复我~ 2021-04-15 12:37:30
  • 提问者 慕沐7268204 #3
    已解决!!谢谢老师!找了半天才发现是自己个别代码拼错。。
    回复 有任何疑惑可以回复我~ 2021-04-15 13:59:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信