Проверьте URL-адрес изображения, используя javascript async / await - PullRequest
0 голосов
/ 21 апреля 2020

Я видел несколько подобных вопросов, но все они просто используют alert или console.log в качестве результата, и у меня другая проблема.

Я пытаюсь проверить, есть ли изображение URL-адрес действителен при использовании async/await и axios.

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 s для проверки результатов. Проблема в том, что я никогда не вижу эти журналы в функции asyn c, а console.log(imageValid) всегда печатает объект Promise в консоли. Не могу понять, как правильно реализовать это.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Это мое решение:

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;
  }
})();
0 голосов
/ 21 апреля 2020

Вы не можете использовать async-await в некоторых функциях. Вы можете использовать традицию для -l oop. В то же время вы можете очистить функцию 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();
...