В прошлой статье я рассказал, как запустить два модуля 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/