使用節點子進程exec
,我通過承諾花費一點時間調用ffmpeg轉換。每次使用點擊「下一步」就上了一個新文件開始ffmpeg的命令:殺死未解決的承諾(或忽略並繼續前進)
function doFFMpeg(path){
return new Promise((resolve, reject) => {
exec('ffmpeg (long running command)', (error, stdout, stderr) => {
if (error) {
reject();
}
}).on('exit', (code) => { // Exit returns code 0 for good 1 bad
if (code) {
reject();
} else {
resolve();
}
});
});
}
問題是,如果用戶移動到返回的承諾之前,下一個視頻,我需要報廢處理並繼續轉換下一個視頻。
我怎麼可以:
A)(理想)取消當前的承諾EXEC進程* B)讓電流承諾EXEC過程完成,只是忽略了希望,而我開始一個新的。
*我意識到promise.cancel is not yet in ECMA,但我想知道的解決方法 - 最好不使用第三方模塊/庫。
嘗試:
let myChildProcess;
function doFFMpeg(path){
myChildProcess.kill();
return new Promise((resolve, reject) => {
myChildProcess = exec('ffmpeg (long running command)', (error, stdout, stderr) => {
if (error) {
reject();
}
}).on('exit', (code) => { // Exit returns code 0 for good 1 bad
if (code) {
reject();
} else {
resolve();
}
});
});
}