假设有一个函数doRequest(options)
,应该执行一个HTTP请求并将其http.request()
用于该请求。
如果doRequest()
在循环中调用if
,我希望下一个请求是在上一个完成之后执行的(串行执行,一个接一个)。为了不使回调和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);
});
});
});
async/await
兑现承诺。仅当async
您要使用的函数await
返回Promise时,它们才起作用。
要解决您的问题,您可以使用类似的库,也可以request-promise
从doRequest
函数中返回promise 。
这是使用后者的解决方案。
function doRequest(options) {
return new Promise ((resolve, reject) => {
let req = http.request(options);
req.on('response', res => {
resolve(res);
});
req.on('error', err => {
reject(err);
});
});
}
describe('Requests', function() {
var t = [ /* request options */ ];
t.forEach(function(options) {
it('should return 200: ' + options.path, async function () {
try {
let res = await doRequest(options);
chai.assert.equal(res.statusCode, 200);
} catch (err) {
console.log('some error occurred...');
}
});
});
});
我在spring mvc 3.2.2中使用apache http客户端同步发送5个get请求,如图所示。 如何异步(并行)发送所有这些内容并等待请求返回,以便从所有 GET 请求返回已解析的有效负载字符串?
返回的流量 返回一个 如果您不能回答我的问题,请至少告诉我如何并行地执行多个API调用,并在WebClient中等待结果
我正在玩Firebase Storage烘烤成一个照片收集应用程序,收集照片并上传到Firebase Storage后端。我想上传多张照片并等待所有任务完成,收集下载URL并进行下一步。下面是我的代码 我希望收集所有的URI,并使用DownloadURI中存储的结果。当我输入这个时,我意识到这可能不是firebase的问题,而是理解如何等待并行任务完成,执行并继续处理结果。我怎样才能达到这个目标呢
问题内容: 我正在寻找一种方法来异步执行go中的两个函数,该函数返回不同的结果和错误,等待它们完成并打印两个结果。另外,如果一个函数返回错误,我不想等待另一个函数,只打印错误。例如,我具有以下功能: 这里https://play.golang.org/p/-8StYapmlg是我是如何实现它,但是它有太多的代码,我想。可以通过使用interface {}来简化它,但是我不想这样。我想要更简单的东西
问题内容: 使用node.js时,我希望以每次仅运行10个(或n个)的方式访问多个远程URL。 如果本地发生异常(m次),我也想重试一个请求,但是当状态代码返回错误(5XX,4XX等)时,该请求将视为有效。 这对我来说真的很难缠住我的头。 问题: 无法尝试捕获http.get,因为它是异步的。 需要一种在失败时重试请求的方法。 我需要某种信号量来跟踪当前活动的请求计数。 当所有请求完成时,我想在列
我的makefile中的一个目标是一个非常耗时的CPU任务。但是我可以分割工作负载并并行运行任务几次,以加快整个过程。 我的问题是make不会等待所有过程完成。 考虑一下这个简单的脚本,名为“代码> MyTask.SH <代码>: 现在,让我们从bash脚本调用它,并使用等待所有任务完成: 产出如预期: 但是在Makefile中尝试相同的方法时: 它不起作用: 当然,我可以创建多个目标,这些目标可