腾讯云开发学习小结

#tcb-study
##云开发作业 第五章
###将教程范例的cloudtohttp函数使用sdk的getTempFileURL进行替换。
####实现思路:新增异步函数getImgurl一次性取回所有的图链接,在客户端js(index.js和admin.js中对应的地方也要改为异步)中循环取出,考虑到图库可能被修改,在前端加判断给没图的设置为默认图片
【腾讯云开发学习小结】######本地函数 util.js index.js admin.js

async function getImgurl(src) { //console.log(typeof(src)); //console.log(src); //这里的src不是拆开传进来 if(srchttps://www.it610.com/article/==""){ return ""; } let imgs = await cloud.getTempFileURL({ fileList: src }).then(res=>{ return res }) return imgs; }... let urls = await getImgurl(tempitem.imgs); //一次性取回所有的图链接 for(let u in urls.fileList){ let img = document.createElement('img'); //判断一下有没有失效,如果图片丢了就换张默认的上去 if(urls.fileList[u].code === 'SUCCESS') { img.src = https://www.it610.com/article/urls.fileList[u].tempFileURL; } else { img.src ='https://tse4-mm.cn.bing.net/th/id/OIP.dsanUfCFTpQjPIE7rY7W6AHaHZ?pid=Api&rs=1'; } //img.src = https://www.it610.com/article/urls.fileList[u].tempFileURL; img.setAttribute('onclick','previewnetimg("'+img.src+'")'); itemimages.appendChild(img); } ...

##云开发作业 第四章
###将教程范例(意见反馈平台DEMO)中的管理端部分的列表加载变成实时数据库监听形式触发。
####实现思路:新增watch函数用来监听数据库,列表刷新还用原来的方法
######本地函数 admin.js
/** * 监听意见表变化 */ function watch(){ const _ = db.command const watcher = cloud.database().collection('tpark').where({ //因为是监听的整个表,条件是编的,请随意 _openid: _.neq('X') }).watch({ onChange:function(res){ console.log('res'); //用户端有新提交时,看看数据变化 console.log(res); initlist(); }, onError:function(err){ console.error('the watch closed because of error', err) } }); //这里的watcher可以关闭,绑定到页面的按钮上,比如“我现在不想工作”,就可以把这个给关掉 //watcher.close() }

###用户端列表加载云函数适配超过100条的场景,采用promise all的形式进行改造,使其可以支持超过100条。
####实现思路:用户端数据获取改造参考的init-admin云函数,同样也是新增watch函数用来监听
######云函数 init-user
const db = cloud.database(); const _ = db.command; const MAX_LIMIT = 100; exports.main = async (event, context) => { const auth = cloud.auth().getUserInfo(); const uid = auth.uid; let res = {}; //意见反馈数据集合总数 const countResult = await db.collection('tpark').count(); const total = countResult.total; const batchTimes = Math.ceil(total / MAX_LIMIT); console.log(batchTimes); const tasks = [] //取数据 for (let i = 0; i < batchTimes; i++) { const promise = await db.collection('tpark').where({ _openid:uid }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).orderBy('adddue', 'desc').get(); tasks.push(promise); } //数据拼接 //https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce res.list = (await Promise.all(tasks)).reduce((acc, cur) => { return { data: acc.data.concat(cur.data), errMsg: acc.errMsg, } }).data; res.code = 0; return res; };

######本地函数 index.js
/** * 加载意见列表(调用云函数:init-user) */ function initlist(){ //实时监听 //collection监听方法是将有变化的数据集的新增数据追加到原数据集合中 //如果按课程提供的代码,展示结果有点辣眼前 //所以统一用云函数取数据来刷新列表 cloud.callFunction({ name: 'init-user' }) .then((res) => { refreshlist(res.result.list); }); }/** * 监听意见表变化 */ function watch(){ const watcher = cloud.database().collection('tpark').where({ _openid:uid }).watch({ onChange:function(res){ initlist(); }, onError:function(err){ console.error('the watch closed because of error', err) } }); }

大概是大前天吧,想把腾讯云主机改造一下,结果在官网发现了这个QQ群的WEB训练营的广告,因为进得比较晚,没赶上直播课,就把录播课程下载下来大概看了一下,顺手把这期的做业也做了。 没啥正经开发经验,磕磕绊绊地总算是按题目要求完成了。 这里先把部分代码和思路放上来做个临时记录,后续还是得优化一下代码,起码让自己用起来舒服。 老师说这期完结会有礼品,好期待,正好有个想法打算用代码实现出来,感觉用云开发的方式实现会更有意思。 慢慢来吧,这个小项目从现在开始,算是启程了。

#活动链接:云开发零基础训练营

    推荐阅读