Имитация `&&` и `||` с помощью Nodejs

В прошлой статье я рассказал, как запустить два модуля Nodejs в одном без оболочки. Секрет заключается в дочернем процессе, предлагаемом самим Nodejs. Сегодня я расскажу о двух других различных типах, которые позволяют имитировать && и || как shell.

Нашел отличное объяснение && и || о shell.

&& объединяет команды вместе. Последующие команды выполняются только в случае успешного выполнения предыдущих.
Аналогично, || позволит выполнить последующую команду, если предыдущая не выполнится.

Сигналом, по которому shell определяет, завершились ли команды успешно или нет, является код выхода.

Код выхода.

Код выхода — это код, который возвращается из вашей программы. В мире NodeJS мы используем process.exit для выхода и задаем соответствующий код для выхода. Например.

// exit without error
process.exit(0)

// exit with errors
process.exit(1)
Войти в полноэкранный режим Выход из полноэкранного режима

В общем случае 0 используется как код успеха, а остальные — для всего остального. Обычно нам не нужно задавать код выхода явно, как в приведенном выше сценарии, NodeJS правильно обрабатывает выход программы.

Код выхода дочернего процесса

После завершения дочерний процесс будет испускать событие exit с кодом в качестве данных. Из основного процесса мы можем использовать следующий скрипт для проверки кода и выполнения следующих действий, например, выполнить другой скрипт или нет.

childprocess.on('exit', (code) => {
  // inspect the code and operate as "&&" or "||"
})
Войти в полноэкранный режим Выйти из полноэкранного режима

Итак, начнем

const fork = require('child_process').fork

// Equivalent to &&
const c1 = fork('./child1.js')
c1.on('exit', (code) => {
  if (code === 0) {
    const c2 = fork('./child2.js', {
      detached: true
    })
  }
})

Войти в полноэкранный режим Выйти из полноэкранного режима

и

const fork = require('child_process').fork
// Equivalent to ||
const c1 = fork('./child1.js')
c1.on('exit', (code) => {
  if (code !== 0) {
    fork('./child2.js', {
      detached: true
    })
  }
})
Войти в полноэкранный режим Выход из полноэкранного режима

Спасибо за прочтение.

Ссылки

https://shapeshed.com/unix-exit-codes/

Оцените статью
devanswers.ru
Добавить комментарий