函数内引入外部函数的调用顺序问题及解决方案

项目需求:uniapp中点击保存图片到相册的功能,需要将临时路径开头以wxfil转换为以http开头的路径

项目问题:内部函数处理数据后给外部函数调用,但是一直调用外部函数再走内部函数。

问题过程:

1.需要先使用uploadFile函数将本地资源上传到开发者服务器,并返回以http开头的路径

2.uploadFile函数位于公共方法中,需要在当前页面引入。

然而,在实际使用中,会出现先调用外部函数再处理内部函数生成的路径的情况,导致调用顺序不符合预期。为了解决这个问题,我们需要在函数内部正确引用外部函数,并确保调用顺序符合预期

解决方法:改变this指向问题

解决思路:

在tempFilePath函数中,使用了this.upLoadImgUrl来调用downSaveImage方法。然而,根据JavaScript的作用域规则,回调函数中的this的值可能会发生改变,导致无法正确访问upLoadImgUrl属性。

为了解决这个问题,在外部保存this的引用,并在回调函数中使用该引用来访问upLoadImgUrl属性。可以使用let that = this来保存this的引用,然后在回调函数中使用that.upLoadImgUrl来调用downSaveImage方法。

参考代码:

tempFilePath(res) {
  console.log('生成图片触发后返回的图片路径', res)
  let that = this
  uni.uploadFile({
    url: 'https://app.wugongyuan.cn/api/common/uploadFile',
    filePath: res,
    name: 'file',
    success: function (res) {
      that.upLoadImgUrl = JSON.parse(res.data).data.fileUrl
      //一直先走downSaveImage函数,上面处理过的数据upLoadImgUrl带不到下面去。
      that.$tools.downSaveImage(that.upLoadImgUrl)  
     //解决方法,使用that = this,改变this指向
    },
    fail: function (error) {
      console.log(error)
    },
  })
}

你可能感兴趣的:(javascript,前端,vue.js,uni-app,微信小程序)