【问题标题】:Async/Await function returning _40: 0, _65: 0, _55: null, _72: null异步/等待函数返回 _40: 0, _65: 0, _55: null, _72: null
【发布时间】:2019-12-16 00:44:05
【问题描述】:

在尝试获取图像的原始大小时,我从 Async/Await 函数返回了这个 { _40: 0, _65: 0, _55: null, _72: null }。功能使用请参考https://www.npmjs.com/package/react-native-image-size

这是我的代码。

getImgSize = async (url) => {
  const {width, height} = await ImageSize.getSize(url);
  const imgSize = { width: width, height: height }

  console.log(imgSize) // result is { width: 950, height: 634 }

  return imgSize;
}

function getImage(){
  var imgSize = getImgSize("https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzEwNC84MzAvb3JpZ2luYWwvc2h1dHRlcnN0b2NrXzExMTA1NzIxNTkuanBn");

  console.log(imgSize) // result after returned { _40: 0, _65: 0, _55: null, _72: null }
}

我希望结果类似于{ width: 950, height: 634 },但我提到的结果却被返回了。

【问题讨论】:

  • 你不是在等待 getImage 返回的承诺
  • 不等待是什么意思?

标签: react-native async-await return-value


【解决方案1】:

您正在调用async 函数,这意味着它是一个承诺。你得等结果。

所以要么使用await

getImage = async () => {
  var imgSize = await getImgSize("https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzEwNC84MzAvb3JpZ2luYWwvc2h1dHRlcnN0b2NrXzExMTA1NzIxNTkuanBn");

  console.log(imgSize);
}

还是这样处理

getImage = () => {
    getImgSize('https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzEwNC84MzAvb3JpZ2luYWwvc2h1dHRlcnN0b2NrXzExMTA1NzIxNTkuanBn').then((imgSize) => {
      console.log(imgSize);
    });
}

【讨论】:

    【解决方案2】:

    需要添加awaitasync函数:

     getImgSize = async (url) => {
          const {width, height} = await ImageSize.getSize(url);
          const imgSize = { width: width, height: height }
          console.log(imgSize) // result is { width: 950, height: 634 }
          return imgSize;
    }
    
    async function getImage(){
      var imgSize = await getImgSize("https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzEwNC84MzAvb3JpZ2luYWwvc2h1dHRlcnN0b2NrXzExMTA1NzIxNTkuanBn");
      console.log(imgSize) // result after returned { _40: 0, _65: 0, _55: null, _72: null }
    }
    

    【讨论】:

      【解决方案3】:

      你必须使用 async 和 await 或使用 then() => 反对它,让我们看看它并在你需要等待的地方使用它。

      【讨论】:

        【解决方案4】:

        试试看

        getImgSize("<Image URL>")
        .then((imgSize)=>console.log(imgSize))
        

        或者把它放在 async/await 中

        getImage = async () => {
          var imgSize = await getImgSize("<Image URL>");
          console.log(imgSize);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-04
          • 1970-01-01
          • 2021-11-26
          • 2021-06-07
          • 2023-03-24
          • 2022-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多