【小程序】小程序消息队列的封装
消息队列
在支付宝小程序中,由于并发数量的限制,同时发送多个请求的话,有可能会造成请求的丢失,因此封装一个消息队列,对超过5条的进行中请求做排队处理。

代码实现如下:
1 | const MAX_COUNT = 5 |
这样,就实现了一个消息队列,任意时间进行中的请求不会超过5条。
次级队列
实际小程序操作中,有大量的埋点和formId请求,这些请求是用于大数据统计,成功或失败不影响用于体验。但是如果队列中加载了埋点请求,会造成正常的请求等待,影响页面加载速度,进而影响用户体验。因此,我们需要对请求做一个区分,优先推送普通请求。

代码实现如下:
1 | const MAX_COUNT = 5 |
锁定队列
实际开发中,大部分请求都需要一个前置请求完成,就是获取uid。假设用户都从首页进入,那么只需在首页先获取uid,在回调中进行其他操作即可。但实际情况是,小程序的很多页面都可以外投,当这些页面中发送请求时,没有uid就会报错。
显然我们不可能在每个页面去获取uid,再把请求写到回调中。对于全局的操作,应该放到app.js中来执行。但是同样的问题,获取uid是个异步操作,可能在获取到结果之前,页面的请求已经发出,此时参数中没有uid依然报错。
因此,我们需要一个锁定功能,当执行获取uid后,立即将队列锁定,等到uid返回之后,再解锁队列继续请求。

1 | const MAX_COUNT = 5 |
1 | //app.js使用示例 |
mock请求
在实际开发过程中,有时候后端某个接口报错,或是新功能的接口还没写好或是暂时没有数据。这时,我们需要对某个接口进行mock,直接写在页面里的话,往往接口比较大,影响开发,而且删除后不方便后续再次使用。因此,在代码中新增一个mock数据文件,并对接口做拦截处理,判断有无mock。

1 | // Mock.js |
1 | const MAX_COUNT = 5 |
说明:测试了在小程序开发工具中新增的anymock功能,发现可实现相同的功能,针对部分接口做mock拦截。且该网页支持mockjs语法,建议使用anymock来做,减少前端代码体积。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ahao430 的博客!
评论