小程序关于request请求的限制
- 默认超时时间和最大超时时间都是 60s
- request、uploadFile、downloadFile 的最大并发限制是 10 个
- 网络请求的 referer header 不可设置。其格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本。
- 小程序进入后台运行后(非置顶聊天),如果 5s 内网络请求没有结束,会回调错误信息 fail interrupted;在回到前台之前,网络请求接口调用都会无法调用。
有时候业务上需要同时请求10个以上的链接,针对这种情况需要延迟后续的请求,等当前请求完结后再去执行后续的请求
解决思路
达到并发限制数量之后,延迟之后的请求,待之前的请求结束,再去发送之前延迟的请求
-
缓存当前请求的数量
// 使用闭包缓存当前的请求量 var req = (function(){ var count = 0; var counter = function() { count--; }; return function(fn) { if (count < 10) { count++; fn(counter); } else { setTimeout(req.bind(null, fn), 300); } }; })()
-
模拟20个异步事件
var a = function(fn){ // 假设所有的异步事件都是2s后完成 setTimeout(()=>{ console.log(new Date().getTime().toString().slice(-4)) // 此处fn是req中的counter,在异步事件执行之后,释放其所占用的count fn() },2000) } var b = Array.from({length:20}); b.map(()=>req(a))
- 结果验证
可以看到前10个请求与后十个请求是间隔2s之后才发出的,即将请求十个一组分开,这样就避免了10个并发请求限制下,请求丢失的问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。