Console.log не отображается на втором уровне обещания узла - PullRequest
0 голосов
/ 22 ноября 2018

Я создаю собственный генератор CHANGELOG на основе коммитов git с использованием nodegit (мне не очень понравились существующие подобные проекты, и это довольно простой инструмент для создания, по крайней мере, в теории).

Моя проблема сейчас заключается в том, что я не могу заставить console.log показывать какой-либо вывод, когда он находится во втором слое обещаний.

Этот код показывает первый console.logвход, но второй исчезает в киберпространстве.Он не показывает никаких ошибок или чего-либо еще, он просто не появляется в консоли.

git.Repository.open(repo_root).then(function (repo_handle) {
  repo_handle.Tag.list(repo_handle).then(function (tag_list) {
    console.log("THIS SHOWS"); // <--- Shows
    repo_handle.getTagByName(tag_list[0]).then(function (tag) {
      console.log("THIS DOES NOT"); // <--- Doesn't show
    });
  });
});

И просто чтобы убедиться, что проблема не в функции getTagByName, работает приведенный ниже кодпросто отлично и выводит THIS SHOWS, так что это что-то связанное с помещением функции регистрации во второй слой обещаний.

git.Repository.open(repo_root).then(function (repo_handle) {
  repo_handle.getTagByName('v0.0.1').then(function (tag) {
    console.log("THIS SHOWS");
  });
});

Кстати, я пробовал пару разных версий одного и того же кода,например, с использованием return repo_handle.Tag.list(repo_handle) и then(tag_list), но результаты были одинаковыми.

Насколько я могу судить, код на самом деле не содержит ошибок или чего-то еще, кажется, что код работает нормально, так как яЯ не получаю никаких ошибок, но опять же, если console.log не работает должным образом, то может быть просто так, что он не показывает мне ошибки либо ...

1 Ответ

0 голосов
/ 22 ноября 2018

Это, вероятно, означает, что repo_handle.getTagByName('v0.0.1').then(function (tag) { никогда не запускается.Попробуйте что-то вроде этого:

git.Repository.open(repo_root).then(function (repo_handle) {
    repo_handle.Tag.list(repo_handle).then(function (tag_list) {
        console.log("THIS SHOWS"); // <--- Shows
        repo_handle.getTagByName(tag_list[0]).then(function (tag) {
            console.log("THIS DOES NOT"); // <--- Doesn't show
        }).catch(error => {
            console.log("gotcha! ", error);
        });
    });
});

сама console.log не имеет ничего общего с глубиной вложенности обещаний

Обновление от asker

Для тех, кто найдет это позже,реальная проблема оказалась в том, что repo_handle.Tag не был определен, и я нашел его благодаря добавлению catch для ошибки и, следовательно, принятию этого ответа.

Новый обновленный код, который работает следующим образом:

let nodegit = require('nodegit');
let path = require('path');

var repo_root = path.resolve(__dirname, './.git');
let repo = null;

nodegit.Repository.open(repo_root)
  .then(function (repo_handle) {
    repo = repo_handle;
    return nodegit.Tag.list(repo_handle);
  })
  .then(function (tag_list) {
    return repo.getTagByName(tag_list[0]);
  })
  .then(function (tag) {
    console.log(tag.message());
  })
  .catch(function (e) {
    console.error(e);
  });
...