Почему мой (try-catch) код выполняется слишком рано в NodeJS? - PullRequest
0 голосов
/ 21 декабря 2018

В ответ на вызов HTTP GET (с собственным модулем http) я пытаюсь JSON.parse() ответить после отправки события end.Я точно знаю, что данные, которые я получаю, действительны в формате JSON, но все равно JSON.parse выдает ошибку.И мои журналы показывают, что JSON.parse вызывается раньше, чем следует.

res.on("end", () => {
  console.log('Req ended message is', body);

  try {
    var passport = JSON.parse(body);
  } catch (e) {
    w.info(
     "Cannot parse the response from : " +
     process.env.mongo_api_host +
     " | error  : " +
     e
   );
  }
  callback(passport);
 return;
});

И мой журнал показывает:

info: Getting MongoDB passport for model : CESI
info: Cannot parse the response from : mongo_api | error  : SyntaxError: Unexpected end of JSON input
info: Req ended message is *long valid JSON data*

Мы ясно видим в журналах, что ошибка разборапойман и зарегистрирован до "Req ended message is : ... stuff".

Чего мне не хватает?

Редактировать 1:

Даже если поместить callback(passport) в блок try, как предложено в комментарии, он все равно делает это:

      res.on("end", () => {
        try {
          console.log("Req ended message is", body);
          var passport = JSON.parse(body);
          //TODO What if you get an array ?
          if (passport._id) delete passport._id;
          callback(passport);
        } catch (e) {
          w.info(
            "Cannot parse the response from : " +
              process.env.mongo_api_host +
              " | error  : " +
              e
          );
        }
        return;
      });
...