Assume there is a function doRequest(options)
, which is supposed to perform an HTTP request and uses http.request()
for that.
If doRequest()
is called in a loop, I want that the next request is made after the previous finished (serial execution, one after another). In order to not mess with callbacks and Promises, I want to use the async/await pattern (transpiled with Babel.js to run with Node 6+).
However, it is unclear to me, how to wait for the response object for further processing and how to return it as result of 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?!
};
If I run my current code using mocha using various options for the HTTP requests, all of the requests are made simultaneously it seems. They all fail, probably because doRequest()
does not actually return anything:
describe('Requests', function() {
var t = [ /* request options */ ];
t.forEach(function(options) {
it('should return 200: ' + options.path, () => {
chai.assert.equal(doRequest(options), 200);
});
});
});
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…