收藏
回答

while循环上传图片,不能及时回调

问题模块
API和组件


循环upload方法,但不能及时回调,计数器不更新,导致不能跳出while(经测试,当用时间戳比较,如3秒后强行终止while,发现其实服务器接口已经有返回结果了,就是没有及时回调)。是不是因为线程占用什么的不能这样写?

最后一次编辑于  2017-12-11  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

5 个回答

  • 123
    123
    2017-12-21

    好高级,时间不够了,等下个版本再试下。多谢了

    2017-12-21
    赞同
    回复
  • 招财猫🐱
    招财猫🐱
    2017-12-12

    这个比较麻烦,你要自己做个线程池才行,而且还要做一个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是一个数组,里面会记录每个子任务的处理结果(也是一个数组)

    })


    2017-12-12
    赞同
    回复
  • 123
    123
    2017-12-12


    小程序不是说最多创建5个连接吗。我是想如果要上传9张图片,先一下子建个5个连接上传5张图片,当有一个请求完成,立马再建个连接上传下一张图片。有参考代码吗,求赐教啊。

    2017-12-12
    赞同
    回复
  • 赵青山
    赵青山
    2017-12-11

    感觉你是在无脑上传第一张啊,一张一张上传用for循环完全可以

    2017-12-11
    赞同
    回复
  • 招财猫🐱
    招财猫🐱
    2017-12-11

    不要用while,这样会阻塞UI线程,应该用Promise和setTimeout

    2017-12-11
    赞同
    回复