时间:2019-05-07 来源:小程序工厂
幺***:
不要用while,这样会阻塞UI线程,应该用Promise和setTimeout
赵***:
感觉你是在无脑上传第一张啊,一张一张上传用for循环完全可以
视频自动播放4秒左右暂停
H***:
微信小程序不是说最多创建5个连接吗。我是想如果要上传9张图片,先一下子建个5个连接上传5张图片,当有一个请求完成,立马再建个连接上传下一张图片。有参考代码吗,求赐教啊。
幺***:
这个比较麻烦,你要自己做个线程池才行,而且还要做一个interval来检查下载队列和线程池是不是都有空,有的话开始一个线程,参考代码(我没试过,可能有坑,请自己调试):
let tasks = [.....], //要下载的文件
promises = [],workers = {};
for(var i =0; i< 5; i++){
promises.push(new Promise((resolve, reject) =>{
let results = {}, //记录当前的任务处理了哪些下载文件结果
intvalId = setInterval(() => {
if(!tasks.length) {
clearInterval(intervalId);
resolve(results); //表示下载任务全部完成
}
if(workers[intervalId]) return; //当前worker工作中,无法处理东西
workers[intervalId] = true;
let task = tasks.pop();
wx.uploadFile({
url: task,
...
success: res => {
//后续操作
....
//把当前任务置为空闲状态
workers[intervalId] = false;
results[task] = res.tempFilePath; //记录处理结果
},
fail: res => {
//失败处理
}
})
}, 100);
}));
}
Promise.all(promises).then(res => {
...后续的处理逻辑,res是一个数组,里面会记录每个子任务的处理结果(也是一个数组)
})
H***:
好高级,时间不够了,等下个版本再试下。多谢了
微信小程序的webscoket链接wss协议问题