【问题标题】:Node.js request - handling multiple POST requestsNode.js 请求 - 处理多个 POST 请求
【发布时间】:2017-09-03 05:39:43
【问题描述】:

我使用请求库通过 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
});

【问题讨论】:

标签: javascript node.js


【解决方案1】:

有几种方法可以解决这个问题:

  • 异步库,并行方法
  • Promise.all

要将您的请求转换为承诺,请使用 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);

【讨论】:

  • 谢谢。这很有帮助。如果我不知道确切的请求数量怎么办?我应该使用常规循环来实现 const promises 数组吗?
  • 动态填充就行了,没问题。
  • 最后一个问题:所有这些请求都应该向我发送一个我刚刚在另一台服务器上远程创建的对象的 ID。我创建了一个 id 数组并尝试填充它,如果一切正确,则推送接收到的 body.id 值。但是它不起作用,在 Promise.all 之后我只得到一个空数组。你知道如何解决吗?我已经编辑了我的初始代码以向您展示所有内容
  • @Jacek717 Promise.all 返回数组数组。如果您确定收到空响应 - 在其他地方搜索错误。
  • 添加选项对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多