我有一个异步函数,它可以调用face_detection
命令行。它在其他方面工作正常,但是我不能让它等待响应。下面是我的函数:
async uploadedFile(@UploadedFile() file) {
let isThereFace: boolean;
const foo: child.ChildProcess = child.exec(
`face_detection ${file.path}`,
(error: child.ExecException, stdout: string, stderr: string) => {
console.log(stdout.length);
if (stdout.length > 0) {
isThereFace = true;
} else {
isThereFace = false;
}
console.log(isThereFace);
return isThereFace;
},
);
console.log(file);
const response = {
filepath: file.path,
filename: file.filename,
isFaces: isThereFace,
};
console.log(response);
return response;
}
isThereFace
在我返回的响应中总是undefined
,因为响应在face_detection
的响应准备好之前就发送到客户端了。
3条答案
按热度按时间vd8tlhqk1#
您可以使用
child_process.execSync
调用,它将等待exec完成。但是不鼓励执行sync调用...或者你可以用承诺来 Package
child_process.exec
j8ag8udp2#
我认为你必须将child.exec转换成一个Promise,并将其与wait一起使用。否则异步函数不会等待child.exec结果。
为了使它更容易,你可以使用Node util.promisify方法:https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original
rjzwgtxy3#
一行程序就可以做到这一点: