Как дождаться и вернуть результат http.request (), чтобы несколько запросов выполнялись последовательно?
Предположим, что есть функцияdoRequest(options)
, который должен выполнить HTTP-запрос и используетhttp.request()
для этого.
ЕслиdoRequest()
вызывается в цикле, я хочу, чтобы следующий запрос выполнялся после предыдущего завершения (последовательное выполнение, одно за другим). Чтобы не связываться с обратными вызовами и обещаниями, я хочу использовать шаблон async / await (поставляется с Babel.js для запуска с Node 6+).
Однако мне неясно, как ждать объект ответа для дальнейшей обработки и как вернуть его в результатеdoRequest()
:
var doRequest = async function (options) {
var req = await http.request(options);
// do we need "await" here somehow?
req.on('response', res => {
console.log('response received');
return res.statusCode;
});
req.end(); // make the request, returns just a boolean
// return some result here?!
};
Если я запускаю свой текущий код, используякофе мокко используя различные опции для HTTP-запросов, все запросы выполняются одновременно. Все они терпят неудачу, вероятно, потому чтоdoRequest()
на самом деле ничего не возвращает:
describe('Requests', function() {
var t = [ /* request options */ ];
t.forEach(function(options) {
it('should return 200: ' + options.path, () => {
chai.assert.equal(doRequest(options), 200);
});
});
});