Я запускаю запрос HTTP GET, используя популярный модуль узла-запроса для каждого элемента массива; затем запустить функцию в последнем элементе массива. Мой код выглядит следующим образом:.every() не ждет HTTP-запроса
const request = require('request');
var arr = ['John', 'Jane', 'Marry', 'Scarlet'];
var x = 0;
arr.every(function (i) {
x++;
/*instead of waiting for request, it adds x and moves on making x
3 when the first request finally runs*/
request({
url: 'http://localhost:8810/getLastName?firstName=' + i
}, function (error, response, body) {
//execute some code
if(x==arr.length){
//therefore this function is run for each item in the array.
// it should run only once per array.
}
})
return true;
})
Я надеялся добиться этого без написания тонны коды поэтому держать мой код красиво и аккуратно.
EDIT: Я не пытаюсь запустить его в порядке. Я не против, чтобы он работал параллельно, но я просто пытаюсь вызвать функцию один раз после завершения.
Вы должны использовать обещания. http://blog.slaks.net/2015-06-10/advanced-promise-usage/ – SLaks
'request()' is async. Он не блокируется. Вы должны написать свой код, используя обещания или обратные вызовы, которые отслеживают, когда выполняется каждая операция async. Вы хотите сериализовать запросы (по одному за раз) или запустить их все параллельно и просто знать, когда все будет сделано? – jfriend00
Я просто хочу знать, когда все это сделано, я могу запустить эту последнюю функцию один раз. – Monstrum