#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. Вам нужно переосмыслить свою последовательность событий. Например. Если вы будете отправлять все запросы один за другим, они могут выполняться параллельно с сервером, и вы получите ответ быстрее