节点JS /如何减慢forEach循环?

By simon at 2018-02-28 • 0人收藏 • 34人看过

我正在NodeJS中创建一个应用程序,只是为了将JSON文档发送到远处的API。 我的问题是我的JSON很大,并且Node尝试t尽可能快地发送 来自阵列的项目,对于API来说太快了。 我怎么能减慢一点forEach功能?我真的找不到 在哪里放置一个setTimeout,Node总是继续下一个 步... 我展示给你我的代码,我很确定没有那么难,但感觉像这样 究竟是什么NodeJs不是真正为之而做的,是吗?

var datajson = "MY JSON";

datajson.forEach(function (element) {

  var options = {
    method: 'POST',
    url: 'http://XXX',
    headers: { XXX },
    body: { XXX },
    json: true
  };

  request(options, function (error, response, body) {
    if (error) throw new Error(error);
    console.log(body);
  });
});

2 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

您可以使用setInterval定期调用发送该函数的函数 发布请求,如下所示:

var datajson = "MY JSON1";

var delay = 1000;

var index = 0;

var interval = setInterval(function () {
  var element = datajson[index];

  var options = {
    method: 'POST',
    url: 'http://XXX',
    headers: { XXX },
    body: { XXX },
    json: true
  };

  request(options, function (error, response, body) {
    if (error) {
      clearInterval(interval);
      throw new Error(error);
    }
    console.log(body);
  });

  // stop sending post requests when all elements have been sent
  if (++index === datajson.length) {
    clearInterval(interval);
  }
}, delay)

2018-02-28   #2

您可以使用setInterval定期调用发送该函数的函数 发布请求,如下所示:

var datajson = "MY JSON1";

var delay = 1000;

var index = 0;

var interval = setInterval(function () {
  var element = datajson[index];

  var options = {
    method: 'POST',
    url: 'http://XXX',
    headers: { XXX },
    body: { XXX },
    json: true
  };

  request(options, function (error, response, body) {
    if (error) {
      clearInterval(interval);
      throw new Error(error);
    }
    console.log(body);
  });

  // stop sending post requests when all elements have been sent
  if (++index === datajson.length) {
    clearInterval(interval);
  }
}, delay)

登录后方可回帖

Loading...