gpt4 book ai didi

typescript - 如何让 child_process.spawn 在我的 TypeScript 模块中返回一个 Promise?

转载 作者:行者123 更新时间:2023-12-03 23:36:37 33 4
gpt4 key购买 nike

我正在尝试编写一个使用 child_process.spawn 的小模块克隆一个 git repo 并返回一个 Promise 但它对我来说失败了。当我使用 spawnSync 时,它可以工作。

这是有效的同步代码。

import {spawnSync} from 'child_process';
export default async function clone(options: { url: string; path: string; }) {
const url = options.url;
const target = options.path;
const args = ['clone', url, target];
return spawnSync('git', args);
}

这是异步代码失败并返回 undefined
import {spawn} from 'child_process';
export default async function clone(options: { url: string; path: string; }) {
const url = options.url;
const target = options.path;
const args = ['clone', url, target];
const process = spawn('git', args);
process.on('close', function () {
return new Promise(function (resolve, reject) {
process.addListener('error', reject);
process.addListener('exit', resolve);
});
});
}

我也试过:
process.on('close', function (code) {
return code;
});

或者
process.on('close', function (code) {
return Promise.resolve(code);
});

以及其他一些内容,例如 …on('exit', function(code){
return code
})

任何建议如何做到这一点?

最佳答案

你已经接近了,你只需要从你的clone返回 promise 函数(不需要是 async ,因为您需要显式创建 promise )。此外,您在错误的时间 Hook 错误事件(据我所知,通过错误的方法):

import {spawn} from 'child_process';
// *** Not async
export default function clone(options: { url: string; path: string; }) {
// *** Return the promise
return new Promise(function (resolve, reject) {
const url = options.url;
const target = options.path;
const args = ['clone', url, target];
const process = spawn('git', args);
process.on('close', function (code) { // Should probably be 'exit', not 'close'
// *** Process completed
resolve(code);
});
process.on('error', function (err) {
// *** Process creation failed
reject(err);
});
});
}

关于typescript - 如何让 child_process.spawn 在我的 TypeScript 模块中返回一个 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53204192/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com