Node.js 按时间间隔同步 HTTP 客户端请求

问题描述 投票:0回答:2

我是node.js的新手,我想做的是编写一个机器人,每0.5秒获取一次市场价格并将它们存储在一个数组中。 IE。调用如下所示的内容,但所有这些都每 0.5 秒按顺序发生一次:

var events_req = https.request(options, function (res) {
    var body = '';
    res.setEncoding('utf-8');
    res.on('data', function (chunk) {
        body += chunk;
    });
    res.on('end', function () {
        if(p.parse(body)) {
            for (var i in MarketPrices) {
                eyes.inspect(MarketPrices[i]);
            }
        }
    });
});
events_req.write(post_data);
events_req.end();

我该怎么做?

P.S.:不用担心

eyes.inspect
- 这只是为了调试目的,这样我就可以看到发生了什么。

node.js sequential
2个回答
2
投票

定义执行您想要的操作的函数并使用 setInterval

function fetch() { .. /* make request here */ }

setInterval( fetch, 500 );

0
投票

2023 年,我编写了 sync-request-curl,它有助于使用 libcurl 的 Easy 接口发送同步 HTTP 请求。

该库包含原始 sync-request 中功能的子集,但利用 node-libcurl 以获得更好的性能和 NodeJS 的附加 libcurl 选项。

这是 GET 请求的简单用法:

// import request from 'sync-request-curl';
const request = require('sync-request-curl');
const response = request('GET', 'https://ipinfo.io/json');
console.log('Status Code:', response.statusCode);
console.log('body:', response.body.toString());
console.log('json:', JSON.parse(response.body.toString()));

这是一个更接近您的用例的示例:

const request = require('sync-request-curl');

setInterval(() => {
  const res = request(
    'GET',
    'https://your-api-url.com',
    {
      headers: {
        // headers goes here
      },
      // Use "json" instead of qs for POST requests
      qs: {
        // query string parameters goes here
      }
  });

  if (res.statusCode !== 200) {
    // Handle non-200 status code
  }

  const body = res.body.toString('utf-8');
  if (p.parse(body)) {
    for (const item of MarketPrices) {
        eyes.inspect(item);
    }
  }
}, 0.5 * 1000);

希望这有帮助:)。

© www.soinside.com 2019 - 2024. All rights reserved.