Функция Nodejs / Meteor тратит много времени на прослушивание email hunter api

#node.js #asynchronous #meteor

#node.js #асинхронный #meteor

Вопрос:

У меня в основном есть список электронных писем, которые необходимо проверить с помощью API.
Этот api работает медленно и требует много времени для ответа.
Мой сервер просто простаивает и тратит время на ожидание ответа api.
Как мне заставить мой сервер обслуживать другие запросы, пока я не получу данные из api?
Моя функция выглядит следующим образом.

 for(var patCounter = 0 ;patCounter<patterns.length;patCounter  ) {
                var pattern = patterns[patCounter];
                hunterUrl = "https://api.emailhunter.co/v2/email-verifier?email=" pattern "@" domain;
                result = HTTP.call('GET', hunterUrl).data.data;
                if(result amp;amp; result.result=="deliverable"){
                    break;
                }
        }
  

Комментарии:

1. Что такое HTTP? какой тип / библиотека?

2. Я использую meteor в серверной части. HTTP — это встроенный api

Ответ №1:

Вам нужно предоставить функцию обратного вызова. В документах Meteor указано, что если вы оставите это в вызове (как вы делаете), вызов заблокируетсяhttps://docs.meteor.com/api/http.html

     for(var patCounter = 0 ;patCounter<patterns.length;patCounter  ) {
                        var pattern = patterns[patCounter];
                        hunterUrl = "https://api.emailhunter.co/v2/email-verifier?email=" pattern "@" domain;
                        HTTP.call('GET', hunterUrl,function (error, result) {
                          if (!error) {
                           //continue processing here
                         }
                        );

   }
  

Комментарии:

1. Это не решает мою проблему. Причина, по которой я выполняю синхронный HTTP-вызов, заключается в том, что мне нужно проверить результат текущего выполнения перед выполнением следующего вызова. Есть другие решения?

2. Это способ JavaScript, вам нужно принять такое решение внутри обратного вызова

3. Я думаю, что должен быть лучший способ.

4. Вам нужно дождаться результатов сервера, вы не можете пройти мимо этого факта. Единственный выбор, который у вас есть, это заблокировать ожидание результата. В JavaScript у вас есть только один поток, поэтому вы не хотите когда-либо блокировать этот поток в ожидании ввода-вывода

5. Вам нужно переосмыслить свою последовательность событий. Например. Если вы будете отправлять все запросы один за другим, они могут выполняться параллельно с сервером, и вы получите ответ быстрее