Я хотел бы запустить внешний ресурс и пинговать его, пока он не будет готов, а затем запустить другую функцию.
Я рассматриваю это как конструкцию с другими языками, где я бы сказал что-то вроде:
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()
Это нормально, и может быть идиоматично, но меня интересует какая-то конструкция "с", чтобы обрабатывать изящную очистку и демонтаж
ресурса. Это существует?