С конструкцией в async ждут дочерний процесс в узле? - PullRequest
0 голосов
/ 29 мая 2019

Я хотел бы запустить внешний ресурс и пинговать его, пока он не будет готов, а затем запустить другую функцию.

Я рассматриваю это как конструкцию с другими языками, где я бы сказал что-то вроде:

  with start_my_external_process(config) as myqueue:
    periodically_do_stuff(myqueue)

Что привлекательно в этом синтаксисе, так это то, что он часто изящно обрабатывает операции типа деконструктора.

В узле я понимаю, что могу использовать пакет child_process для запуска моего внешнего процесса:

const { spawn } = require('child_process');

// but while I can return the external process

async function start_my_external_process((config) => {
  let myqueue = spawn("myprocess", config)
  return myqueue
}

// and forever do stuff with it

async function periodically_do_stuff((child) => {
  do {
   child.stdout.on('data', (data) => {  console.log(`stdout:\n${data}`);})

  } while (true)
}

Мне также хотелось бы подождать, пока ресурс не будет полностью готов, а не только начать работу.

Кроме того, это оставляет меня с синтаксисом вроде:

async function main(() => {
  let queue = await start_my_external_process(config)
  periodically_do_stuff(queue)
}

main()

Это нормально, и может быть идиоматично, но меня интересует какая-то конструкция "с", чтобы обрабатывать изящную очистку и демонтаж ресурса. Это существует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...