【发布时间】:2021-03-27 01:26:27
【问题描述】:
假设有一个函数doRequest(options),它应该执行一个HTTP请求并为此使用http.request()。
如果在循环中调用doRequest(),我希望在前一个完成之后发出下一个请求(串行执行,一个接一个)。为了不弄乱回调和 Promises,我想使用 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?!
};
如果我使用 mocha 运行我当前的代码,并使用 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);
});
});
});
【问题讨论】:
标签: node.js async-await httprequest mocha.js babeljs