这几天在云开发开发小程序的过程中遇到一个很棘手的逻辑问题,
需求是这样的:
在线考试小程序场景,每个科目会把题库(按100个题算)分成10天来完成
(比如day1是[01,02,03,04,05,06,07,08,09,10]这10个题),
每天只能做一个Day的试题,现在问题是:当我们来到小程序需要答题的时候,是从哪一个Day开始做?
数据库有以下两个集合
1、days,用于维护每个day跟试题id的信息,
[
{day1,[01,02,03,04,05,06,07,08,09,10]},
{day2,[11,12,13,14,15,16,17,18,19,20]}
]
2、historys,用于维护用户答题的历史,比如
[
{openid,day1},
{openid,day2}
]
实现的方式有很多种:
1、promise.all
2、async await
本文采用async await方式,那么在小程序中可以使用这种语法吗?经过了解,目前不需要引入其他库是可以正常使用的,但是需要设置一下。
小程序代码中如果用上述语法,在本地设置里面必须选中下图的增强编译,其实这里也是默认选中的
占位符
占位符
那么在进考试的时候就要确定是做哪一天的?具体逻辑如下
1、取这个科目所有的day信息,这里面每条记录包含了当天的题目编号列表,比如[day1,day2,day3,day4,day5,day6,day7,day8,day9,day10]
2、取当前微信用户已经做过的day信息,比如这个用户已经做完了[day1,day2]
3、取上面两个集合的差集[day3,day4,day5,day6,day7,day8,day9,day10],取差集中的第一项也就是day3作为当前答题的试卷
这个逻辑可以用promise.all,但是我在实现的时候选择了async,具体代码如下
占位符
占位符
当求得这两个数组之后,我们取数组的差集,就找出所有未做的day,从中任取一天便可以完成上述需求。
通过该文,我们学习了以下知识点
1、async await在小程序中是否可用
2、如何实现两个数组的差集
3、小程序云开发,数据查询具体如何使用async await
本文完