WedX - журнал о программировании и компьютерных науках

Yeoman - Откладывание ведения журнала до завершения задачи

Я начинаю расстраиваться из-за части Йомен-генератора, которую я строю. Поскольку это мой первый, я не сомневаюсь, что упускаю что-то очевидное, но вот оно.

Проще говоря, я пытаюсь зарегистрировать сообщение, выполнить действия™, а затем зарегистрировать другое сообщение только после того, как эти действия будут выполнены.

Вот метод:

repos: function () {
    var self = this;

    this.log(highlightColour('Pulling down the repositories'));

    // Skeleton
    this.remote('user', 'skeleton', 'master', function(err, remote) {
      if (!err) {
        remote.bulkDirectory('.', self.destinationRoot());
      } else {
        self.log('\n');
        self.log(alertColour('Failed to pull down Skeleton'));
        repoErr = true;
      }
    });

    //
    // Three more near identical remote() tasks
    //

    if (!repoErr) {
      self.log(successColour('Success!'));
      self.log('\n');
    } else {
      self.log(alertColour('One or more repositories failed to download!'));
    }
  },

Каждая из отдельных задач remote() работает нормально, но я получаю как первое, так и последнее сообщение self.log() до копирования файла. Это кажется тривиальным, но я просто хочу, чтобы сообщение об успехе пришло после того, что все было завершено.

Например, в терминале я вижу:

Вытягивание репозиториев

Успех!

результаты копирования файлов

Так должно быть:

Вытягивание репозиториев

результаты копирования файлов

Успех!

Я подумал, что это может быть как-то связано с использованием this.async() с done() в конце каждой задачи remote(), и я попробовал это, но всякий раз, когда я это делаю, ни один из кодов не срабатывает вообще.

Я даже пытался разбить все (включая сообщения) на отдельные методы, но все равно не повезло.

Такая простая цель, но у меня нет идей! Буду признателен за вашу помощь!

РЕДАКТИРОВАТЬ: Если вам интересно, я знаю, что сообщения приходят первыми, потому что любые предупреждения о конфликтах файлов приходят после сообщений :)

09.08.2015

Ответы:


1

Это не проблема, связанная с Йоменом. У вас есть асинхронный код, но вы обрабатываете его так, как если бы он был синхронным.

В примере, который вы разместили здесь, просто выполните регистрацию как часть обратного вызова this.remote:

repos: function () {
  var self = this;

  this.log(highlightColour('Pulling down the repositories'));

  // Skeleton
  this.remote('user', 'skeleton', 'master', function(err, remote) {
    if (!err) {
      remote.bulkDirectory('.', self.destinationRoot());
      self.log(successColour('Success!'));
      self.log('\n');
    } else {
      self.log('\n');
      self.log(alertColour('Failed to pull down Skeleton'));
      self.log(alertColour('One or more repositories failed to download!'));
    }
  });
},

Возможно, ваш реальный вариант использования более сложен; в этом случае вы можете использовать модуль наподобие async (или любую другую альтернативу) для обработки более сложного асинхронного потока. В любом случае, Yeoman не предоставляет помощников для обработки асинхронного кода, поскольку это хлеб с маслом Node.js.

11.08.2015
  • В общем, как лучше всего подойти к принудительному синхронному порядку? Несколько генераторов? 12.08.2015
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]