html52.com
我爱小程序-开发者交流社区

下载音频保存路径,后面每次播放直接用路径,但是下载老遇到问题?

下载的方法定义:

    saveFile: function(id) {
      var that = this
      wx.downloadFile({
        url: 'https://************/voices/' + id,
        success(res1) {
          console.log(res1)
          var savePath = wx.env.USER_DATA_PATH + "/" + id + ".mp3"
          wx.getFileSystemManager()
            .saveFile({ //下载成功后保存到本地
              tempFilePath: res1.tempFilePath,
              filePath: savePath,
              success(res2) {
                console.log(res2)
                //模拟器为:"http://usr/1.mp3" 真机为:"wxfile://usr/1.mp3"
                that.data.ringaddr.ringaddr[id] = res2.savedFilePath
              },
              fail(res) {
                console.log(res)
              }
            })
        },
        fail(res) {
          console.log(res)
        }
      })
    },

调用下载方法:
          if (that.data.ringaddr.length != that.data.ringlist.length) { // ringlist 是已请求下来的音频列表
            appInstance.globalData.ringaddr = []
            for (var i = 0; i < that.data.ringlist.length; i++) { //根据列表 ringlist 的长度来一个个下载
              setTimeout(function() { 
                that.saveFile(that.data.ringlist[i-1].resourceId + "") //下表是从0开始的
              }, 500)
            }
            storage.setStorage("ringaddr", that.data.ringaddr) //保存路径数组
          }

播放调用:

          var res = wx.getSystemInfoSync()
          if (res.platform == 'ios') {
            this.innerAudioContext = wx.getBackgroundAudioManager()
          } else {
            this.innerAudioContext = wx.createInnerAudioContext(); 
          }
          this.innerAudioContext.src = storage.getStorage("ringaddr")[1] 
          this.innerAudioContext.play();


在线播放我这边没有问题,但是因为播报比较频繁,感觉消耗流量太多,所以想到下载,但是折腾好久没法下载到本地,只能得到这样一个路径。

奇怪的是,我把saveFile这个方法添加在一个button上触发又没有问题,折腾一两天了,都开始怀疑1+1=2了···

请教各位前辈:

1、我这段代码是哪里有问题?

2、如果有其他办法解决我这个问题,那更好

网友回复

xplee:

for循环里面的setTimeout(saveFile,500)是异步操作,还没执行完就执行了for外的setStorage,大概率是没有任何结果的。最好写成同步方式调用,用promise,async/await方式。

另外不建议保存mp3到本地,小程序的本地存储空间就10M,存不了大量内容,尤其是音视频。尽量压缩mp3文件大小,使用CDN。


评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付