axios请求结果return时输入undefined

1.需求
在上传成功的图片后面拼接上该图片的宽高值

2.实现
上传图片到阿里OSS上并获取到图片的信息(阿里官网文档

 private async uploadCoverSuccess(val: string) {
    
    
    this.form.imageUrl = this.getImgUrl(val)
    console.log(this.form.imageUrl, '处理图片的结果')
  }

  private async getImgUrl(val : string) {
    
    
    const index = val.indexOf('?')
    let img = ''
    let nowImg = ''
    let imgUrl = ''
    if (index > -1) {
    
    
      img = val.substr(0, index)
      nowImg = val.substr(0, index) + '?x-oss-process=image/info'
    } else {
    
    
      img = val
      nowImg = val + '?x-oss-process=image/info'
    }
    axios.get(nowImg).then(result => {
    
    
      imgUrl = img + `?x-oss-process=image/resize,w_${
      
      result.data.ImageWidth.value},h_${
      
      result.data.ImageHeight.value}`
      console.log(imgUrl, '图片的地址')
      return imgUrl
    })
  }

请求图片信息接口是成功的,拼接图片的宽高后都是正常打印的
但是在上传图片成功回调函数中调用接口方法输入

[[PromiseState]]: “fulfilled”
[[PromiseResult]]: undefined

在这里插入图片描述
因axios返回值是异步操作,获取返回值时,请求操作还未完成,就已经执行了赋值,导致结果返回undefined。
修改代码为:

// 成功上传图片回调
  private async uploadCoverSuccess(val: string) {
    
    
    await this.getImgUrl(val).then(res => {
    
    
      this.form.imageUrl = res
    })
    console.log(this.form.imageUrl, '处理图片的结果')
  }

  private async getImgUrl(val : string) {
    
    
    const index = val.indexOf('?')
    let img = ''
    let nowImg = ''
    let imgUrl = ''
    if (index > -1) {
    
    
      img = val.substr(0, index)
      nowImg = val.substr(0, index) + '?x-oss-process=image/info'
    } else {
    
    
      img = val
      nowImg = val + '?x-oss-process=image/info'
    }
    return axios.get(nowImg).then(result => {
    
    
      imgUrl = img + `?x-oss-process=image/resize,w_${
      
      result.data.ImageWidth.value},h_${
      
      result.data.ImageHeight.value}`
      console.log(imgUrl, '图片的地址')
      return imgUrl
    })
  }

最后在控制台成功输出想要的结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45324044/article/details/113335861