我使用请求库通过API与其他服务器通信。但是现在我需要同时发送多个(10个或更多)POST请求,并且只有在所有响应都正确的情况下才能进一步移动。通常语法看起来有点像这样:
var options = {
url: "",
method: "POST",
header: {...},
body: {...}
};
request(options, function(err,response,body)
{
}
但是现在我有一个对象数组而不是一个选项变量。有没有办法做到这一点?或者也许还有另一个能够解决问题的图书馆。
编辑:
var arrayOfIds = [];
const requests = [];
for(var i in range){
var options = {} // here goes all bodies and headers to send
requests.push( // push a request to array dynamically
request(options, function(err,response,body){
if(!err && response.statusCode == 201){
arrayOfIds.push(body.id);
}
}));
Promise.all(requests)
.then(function(res){
console.log(arrayOfIds); // this is empty
});
答案 0 :(得分:2)
有几种方法可以解决这个问题:
要将您的请求转换为承诺,请使用request
模块 - request-promise
。在代码中它将如下所示:
const request = require('request-promise');
// Note, you don't assign callback here
const promises = [
request.post({...}),
request.post({...}),
request.post({...})
];
// And then you simply do Promise.all
Promise.all(promises).then(console.log);