@Asker1888

Возможно ли сделать promisify для дочернего процесса spawn?

Добрый день!
Разбираюсь с дочерними процессами и возник вопрос про spawn - можно ли его промисифицировать?
Плагин util позволяет промисифицировать дочерний процесс exec (const exec = util.promisify(cp.exec) ).
По аналогии я пытаюсь использовать promisify для spawn, но не удается. В документации данный момент не освещен.
Возможно ли так сделать, и если да, то как?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
bingo347
@bingo347
Бородатый программер
promisify меняет сигнатуру функции с условного
function func<T>(...args: any[], cb: (err: any, result: T) => void): any;
// или
function func<T1, T2>(...args: any[], cb: (err: any, res1: T1, res2: T2) => void): any;
на
function func<T>(...args: any[]): Promise<T>;
// или
function func<T1, T2>(...args: any[]): Promise<{res1: T1; res2: T2}>;

Для exec это возможно, так как его сигнатура подходит под 2 вариант:
function exec(command: string, options?: ExecOptions, cb: (err: Error, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess;
что приходит к сигнатуре:
function exec(command: string, options?: ExecOptions): Promise<{stdout: string | Buffer; stderr: string | Buffer}>;

Для spawn этого сделать нельзя, ибо сигнатура не подходит:
function spawn(command: string, args: string[], options: SpawnOptions): ChildProcess;
Просто некуда подставить колбэк, который будет отслеживать промис
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы