async-child-process
A simple Promise
-based API for working with ChildProcess
es.
Usage
npm install --save async-child-process
join(child: ChildProcess): Promise<Result>
Waits for child
to exit.
Returns a Promise
that:
- will resolve
{code: 0}
ifchild
exits with code 0 - with reject with an error otherwise
error.code
will be the exit code if the child exited normallyerror.signal
will be the signal the child was terminated with, if any- Note: if
child
emits anerror
, it may be the rejection reason and it may not havecode
orsignal
Example:
import {exec} from 'child_process'import {join} from 'async-child-process' async function test() { await join(exec('echo hello world'))}
kill(child: ChildProcess, signal?: string): Promise<void>
Sends a signal to child
and waits for it to exit.
Returns a Promise
that:
- will resolve once
child
is killed - will reject with an
error
ifchild
emits one
Example:
import {exec} from 'child_process'import {kill} from 'async-child-process' async function test() { const child = exec(`node -e 'setTimeout(() => console.log("finally!"), 1e11)'`) await kill(child)}
childPrinted(child: ChildProcess, predicate: (output: string) => boolean | RegExp, stream?: 'stdout' | 'stderr'): Promise<string>
Waits for child
to print something to its stdout
and/or stderr
. Returns a promise that:
- will resolve with the message that matched
predicate
or - will reject if
child
exited or errored before printing a message that matchedpredicate
Arguments:
- child: the
ChildProcess
to listen to - predicate:
childPrinted
will wait untilchild
's stream(s) output a message matching the predicate - stream: which of
child
's streams to listen to, omit to listen to bothstdout
andstderr
Example:
import {exec} from 'child_process'import {childPrinted} from 'async-child-process' async function test() { const child = exec(`webpack --config webpack.config.dev.js`) await childPrinted(child, /webpack built in \d+ ms/)}
execAsync(command: string, options?: Object): Promise<Result>
Like exec
, but returns a Promise
that:
- will resolve with
{stdout: string, stderr: string}
from runningcommand
if it exited with code 0 - will reject with an error otherwise
error.code
will be the exit code if the child exited normallyerror.signal
will be the signal the child was terminated with, if any- Note: if
child
emits anerror
, it may be the rejection reason and it may not havecode
orsignal
Example:
import {execAsync} from 'async-child-process' async function test() { const {stdout} = await execAsync('docker-compose port webapp 80') const testUrl = stdout.trim()}