使用 javascript async/await 检查图像 url

Check image url using javascript async/await

我在这里看到了多个这样的问题,但所有问题都只使用 alertconsole.log 作为结果,而我遇到了不同的问题。

我正在尝试使用 async/awaitaxios 验证图像 url 是否有效。

async function checkImageUrl(imageUrl) {
  let result = false;
  const promise = await axios.get(imageUrl);
  promise.then(() => {
    console.log('result TRUE');
    result = true;
  }).catch(() => {
    console.log('result false');
    result = false;
  });
  console.log(result);
  return result;
}

图像 url 位于 json 数组中。我在另一个函数中使用它,如下所示:

let imageValid = false;
someJson.some((obj) => {
  if (obj?.image != null) {
    imageValid = checkImageUrl(obj.image);
    console.log(imageValid);
    if (!imageValid) return true;
  }
  return false;
});

if (!imageValid) {
  return;
}

我用了一些 console.log 来检查结果。问题是我从来没有在异步函数中看到那些日志,并且 console.log(imageValid) 总是在控制台中打印一个 Promise 对象。无法弄清楚如何以正确的方式实现它。

您可以在某些功能中使用async-await。您可以使用传统的 for 循环。同时你可以清理checkImageUrl函数

function checkImageUrl(imageUrl) {
  return axios
    .get(imageUrl)
    .then((x) => true)
    .catch((x) => false);
}

async function main() {
  let imageValid = false;
  for (let index = 0; index < someJson.length; index++) {
    const obj = someJson[index];
    if (obj?.image != null) {
      imageValid = await checkImageUrl(obj.image);
      if (imageValid) {
        break;
      }
    }
  }
  if (!imageValid) {
    return;
  }
}
main();

这是我的解决方案:

async function checkImageUrl(imageUrl) {
  let result = false;
  try {
    const res = await axios.get(imageUrl);
    result = true;
  } catch (err) {
    console.log(err);
  }
  console.log("result", result);
  return result;
}

(async () => {
  let imageValid = false;
  someJson.some((obj) => {
    if (obj?.image != null) {
      imageValid = await checkImageUrl(obj.image);
      console.log(imageValid);
      if (!imageValid) return true;
    }
    return false;
  });

  if (!imageValid) {
    return;
  }
})();