Node.js中的竞争条件

时间:2020-07-10 09:25:22

标签: node.js api request race-condition

我正在学习Node.js,并正在练习API。我想从有关游戏的前200个流的抽搐中获取数据。但是,由于限制为100,因此我必须在for循环中执行两次请求。问题是比赛条件。当我请求0-100和100-200中的数据时,我不知道哪个数据先出现。因此,我标记了要记录的状态(哪一个先出现),但似乎无法正常工作。谁能指导我我的方法有什么问题?如何改善呢?谢谢!

const request = require('request');
const process = require('process');

const args = process.argv[2];
let offset = 0;
let flag = false;
const clientID = 'agdn5682y521syqhwkdrqmw7ho6v7d';

function getGameInfo(gamename, pagination, clientid, tag) {
  request(
    {
      method: 'GET',
      url: `https://api.twitch.tv/kraken/streams/?game=${gamename}&limit=100&offset=${pagination}`,
      headers: {
        'Client-ID': clientid,
        'Accept': 'application / vnd.twitchtv.v5 + json'
      }
    },
    (err, res, body) => {
      if (!tag) {
        tag = true;
        if (err) {
          return console.log('Error', err)
        };
        const data = JSON.parse(body);

        const result = data.streams;

        if (data.status === 404) {
          console.log('fail to get data!');
        };
        for (let j = 0; j < result.length; j++) {
          console.log(result[j].channel._id, result[j].channel.display_name);
        };
        tag = false;
      }
    }
  )
}

for (let i = 0; i < 2; i++) {
  getGameInfo(args, offset, clientID);
  offset += 100;
}

1 个答案:

答案 0 :(得分:0)

这是您可以做的一个小例子。 Promise等待直到得到D1:F1

然后您可以调用下一个偏移量。

=SUMPRODUCT(($I$5:$I$12="Wedge Pillow")*($J$4:$P$4=DATEVALUE("1-" & $C2 & "-" & D$1)),$J$5:$P$12)