Для цикла, работающего и возвращающего результат, но затем останавливающего и возвращающего: TypeError: Невозможно прочитать свойство 'tag' из undefined - PullRequest
0 голосов
/ 24 марта 2019

У меня настроен сервер узлов, который отправляет запрос API и получает некоторые данные JSON. Я пытаюсь извлечь некоторые из этих данных в массив, и кажется, что это работает, когда я отправляю результат на консоль, но затем программа останавливается и выдает мне ошибку. Вот мой код.

request(options, function (error, response, body) {
  if (error) throw new Error(error);
  var myArray = [];
  bodies = JSON.parse(body);
  let tag = '';
  let bond = '';
  let members = '';
  for(var i = 0; i <= bodies.memberCount; i++){

    let bond = bodies.members[i];
    let smoke = bond.tag;
    if(smoke === "undefined"){
      return;
    }else{

      console.log(smoke);
    }
  }
});

the output in the console is this- 

YYVPJ0G
2PJP89J2Q
9G8Y8022
JC90J0R
9LLYVQVQ
QV2R90V
JC9JVV
20RLC0QY
28LP0P8CG
2QYLGG9GY
2JRQQYQQJ
9YJVV0GJ
2RVP8U9
9VYG0VGQ
C2PGPYC
8CJ9CGG2
YGV0CRL
2VUV22VQY
R8G82YG
PPJUYQJ
28VYV2QJG
YC9LR0G9
8088RCYG
2JUJR2QVY
2YRPUC2Q
GJ0QP90
UGU9LR8
GJQRVC8C
UVVVJ80Q
LURGY8JV
2C9UJRP82
20J9VYVC0
82GUQLYRL
L2PCUYP
2CQUYPJRU
PYU98GU9
9QR2CCCLV
PP9V2P0
CGYLUG
8QLPJRYC2
Y2GYCLU
LQJ0QQ8
P2Y08LLP
P0RUVLG82
/home/phil/ClashApp/requests.js:34
let smoke = bond.tag;
                 ^

TypeError: Cannot read property 'tag' of undefined
    at Request._callback (/home/phil/ClashApp/requests.js:34:18)
    at Request.self.callback (/usr/lib/nodejs/request/index.js:148:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (/usr/lib/nodejs/request/index.js:896:14)
    at emitOne (events.js:121:20)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> 
    (/usr/lib/nodejs/request/index.js:847:12)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)

он дает все результаты, которые я хочу, но останавливает программу, прежде чем я могу отправить их всем myArray ....

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Поскольку нумерация массивов начинается с нуля, а длина - это количество элементов в массиве, поэтому последний индекс - это не длина массива, а длина - 1.

Так что вам нужно заменить i <= bodies.memberCount на i < bodies.memberCount

request(options, function (error, response, body) {
  if (error) throw new Error(error);
  var myArray = [];
  bodies = JSON.parse(body);
  let tag = '';
  let bond = '';
  let members = '';
  for(var i = 0; i < bodies.memberCount; i++){ 
     let bond = bodies.members[i];
     let smoke = bond.tag;
     if(smoke === "undefined"){
       return;
     }else{
        console.log(smoke);
     }
  }
});
0 голосов
/ 24 марта 2019

"bond" не содержит ключ "tag" для определенного тела. Index [index].

добавьте проверку примерно так.

if(bond.tag !== undefined)
   smoke =  bond.tag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...