Ошибка зависания сокета при втором запросе к Trello API - PullRequest
0 голосов
/ 01 мая 2019

Я снова получил ошибку с моим кодом. Я пытаюсь получить некоторые детали для карт из API Trello из двух разных списков. Мой первый список работает без перебоев, но по какой-то причине второй список выдает ошибку «зависание сокета» всякий раз, когда я запускаю программу.

Я прочитал об этом в Интернете, и общий ответ, похоже, таков: у человека, вероятно, отсутствует req.end(), но в моем случае он уже есть в моем коде, что подтверждается тем фактом, что первый запрос работает просто отлично.

Вот код, как он есть:

const req0 = http.request({
      hostname: `api.trello.com`,
      port: 443,
      path: `/1/lists/5cb77e9ef180dd2bbb25acf2/cards?key=${trelloKey}&token=${trelloToken}&fields=name`,
      method: `GET`
    }, res => {
      let str = '';
      res.on('data', chunk => {
        str += chunk;
      });
      res.on('end', () => {
        try {
            var level0Data = JSON.parse(str);
            console.log(`Level 0: ${level0Data}`)
            level0Data.forEach((k,v) => {
                var id = k.id;
                var name = k.name;
                console.log(`${id} = ${name}`);
            });
            level0Data.forEach(function(level0Names) {
              // code here
            });
          } catch(error) {
              console.log(error);
          }
        });
      });
    req0.on('error', error => {
      console.log(error);
    });
    req0.end();

    const req1 = http.request({
      hostname: 'api.trello.com',
      port: 443,
      path: `/1/lists/5cc76a2b291f0760361e957e/cards?key=${trelloKey}&token=${trelloToken}&fields=name`,
      method: `GET`
    }, res => {
      let str = '';
      res.on('data', chunk => {
        str += chunk;
      });
      res.on('end', () => {
        try {
            var level1Data = JSON.parse(str);
            console.log(`Level 1: ${level1Data}`)
            level0Data.forEach((k, v) => {
                var id = k.id;
                var name = k.name;
                console.log(`${id} = ${name}`);
            });
            level1Data.forEach(function(level1Names) {
                   // code here
            });
        } catch(error) {
            console.log(error);
        }
      });
    req1.on('error', error => {
      console.log(error);
    });
    req1.end();
  });

Похоже, что любой запрос помещается вторым, похоже, зависает сокет. Я также проверил ограничения скорости, и, как сказано в документации Trello API, я могу делать 300 запросов в 10 секунд, что в данном случае вообще не проблема.

Руководство будет высоко ценится! Спасибо!

...