Mit Knoten Kind Prozess exec
, rufe ich eine ffmpeg Umwandlung über ein Versprechen, das ein wenig Zeit braucht. Jedes Mal, wenn die Verwendung Klicks „next“ den FFMpeg Befehl in einer neuen Datei beginnt:Kill ein nicht gelöstes Versprechen (oder ignorieren und weitermachen)
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();
}
});
});
}
Das Problem ist, wenn der Benutzer zum nächsten Video bewegt sich auf, bevor das Versprechen zurückgegeben wird, muß ich den Prozess Schrott und gehe zum nächsten Video über.
Wie kann ich entweder:
A) (Im Idealfall den aktuellen versprach exec Prozess * B) Lassen Sie Abbrechen) der aktuelle exec Prozess abgeschlossen versprochen, aber einfach ignorieren dieses Versprechen, während ich eine neue zu starten.
* Ich realisiere, dass promise.cancel is not yet in ECMA, aber ich möchte eine Problemumgehung wissen - vorzugsweise ohne Verwendung eines 3rd-Party-Modul/Bibliothek.
Versuch:
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();
}
});
});
}