时间: 2020-09-1|tag:64次围观|0 条评论

有这样一个需求, 进入一个页面需要播放好几个音频,为了增加用户体验,产品要求在第一次进入的时候就将所有的音频缓存在本地,然后再从本地读取。
但是wx.downloadFile()是一个异步方法,我必须再确定所有的音频下载完成之后在开始播放音频,但是因为是异步方法,解决思路了如下。

  • 设定一个 i = 0 ,使用forEach 依次发起下载请求,每次请求成功就+1,一直判断i == Arr.length 为止
  • 把每一个异步下载的方法都用给为promise,然后组合为一个数组传递给 promise.all 使用,最后在promise.all,的then中开始阅读音频。
  onLoad() {    let kejianList = this.data.kejianArr;    const that = this;    let p = null;    let pArr = []    kejianList.forEach((el, ind) => {      that.audioArr[ind] = []; // 二维数组      el.QiNiuContentAudioUrl.forEach((elt, cind) => {        p = new Promise((resovle, reject) => {          wx.downloadFile({            url: elt,            success(res) {              console.log('下载进度', ind + 1, '/', kejianList.length)              if (res.statusCode === 200) {                that.audioArr[ind][cind] = res.tempFilePath                resovle()              }            },            fail: () => {              reject()              console.log('下载失败')            }          })        })        pArr.push(p)      })    })    console.log(pArr)    Promise.all(pArr)      .then(res => {        console.log('下载成功,音频Arr', this.audioArr)        this.readText()      }).catch(err => {        console.log('下载失败')      })  },

参考

文章转载于:https://www.jianshu.com/p/1a0726f371bf

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《使用 promise.all 依次缓存文件
   

还没有人抢沙发呢~