Обработка асинхронного ожидания http-запроса

У меня есть асинхронная функция ожидания, которая обрабатывает элементы не по порядку в цикле. Как я могу проверить каждый элемент в массиве, прежде чем сделать! журналы для консоли? Таким образом, каждый раз, когда ссылка выдает ошибку, она должна регистрировать ошибку после номера индекса, с которым она связана. Например:

0
ЗДЕСЬ ОШИБКА https://test123.com/ergaergrhaerha0
1
2
3
ЗДЕСЬ ОШИБКА https://test123.com/ergaerrhaerha3
...
готово!

      processArray(ftJsonBySeqAssets);

      async function processArray(arr) {
        for (i in arr) {
          console.info(i)
          await https.get(arr[i].image_link, async (res) => {
            await console.info(res.statusCode, arr[i].image_link)
            if (res.statusCode === 404) {
              console.info('ERROR HERE', arr[i].image_link)
              audience.error.image_link.push(arr[i].image_link)
              audience.error.count++
            }
          });
          await https.get(arr[i].link, async (res) => {
            await console.info(res.statusCode, arr[i].link)
            if (res.statusCode === 404) {
              console.info('ERROR HERE', arr[i].link)
              audience.error.link.push(arr[i].link)
              audience.error.count++
            }
          });
        }
        console.info('done!')
      }

Журналы:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
done!
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1

Итак, вы await создаете функцию, которой передаете обратный вызов? Как вы предполагаете, что именно делает await?

MadWard 22.02.2019 17:32

Я не думаю, что это сработает, вам нужно создать поставщика и создать обещание, которое разрешается или отклоняется на основе возврата обратного вызова.

Riccardo Albero 22.02.2019 17:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
311
1

Ответы 1

Похоже, что https.req не возвращает обещание, поэтому вам нужно создать его самостоятельно, чтобы затем дождаться этого:

 const res = await new Promise(resolve => https.get(arr[i].link, resolve));     
 if (res.statusCode === 404) {
  //...
 }
 //...

Другие вопросы по теме