Vm2: Fehler beim asynchronen Rückruf behandeln

Erstellt am 3. Feb. 2017  ·  8Kommentare  ·  Quelle: patriksimek/vm2

Gibt es eine Möglichkeit, Fehler beim asynchronen Rückruf zu behandeln?

const {NodeVM} = require('vm2');

const vm = new NodeVM({
    timeout: 10000,
    sandbox: {}
});

try {
  vm.run(`
    setInterval(() => {
      console.log("haha")
      process.exit()              // <--- can't find a way to intercept this!
    }, 1000);

    process.exit()
  `, 'code.js');
} catch(e) {
  console.log(e.message);
}


setInterval(() => {
  console.log("haha 2")
},1000);

Ich suche nach einer Möglichkeit, den Absturz des gesamten Skripts zu verhindern.

feature request stale

Hilfreichster Kommentar

Ich verpacke vm.run() mit domain.run() und es scheint zu funktionieren. Ich weiß aber nicht ob es Nebenwirkungen hat..

let domain = Domain.create();
domain.on('error', (err) => {
    console.error('Asynchronous error while executing script.', err.stack);
});
domain.run(() => {
    try {
        vm.run(script, filename);
    } catch (err) {
        console.error('Synchronous error while executing script.', err.stack);
    }
});

Alle 8 Kommentare

Sie können asynchrone Fehler wie folgt behandeln:

process.on('uncaughtException', (err) => {
    console.log(err);
})

Beachten Sie, dass dadurch alle Ausnahmen sowohl innerhalb als auch außerhalb der VM abgefangen werden.

Danke. Ja, es hat mir teilweise geholfen. Übrigens, gibt es eine Möglichkeit zu unterscheiden, ob der Fehler in 'uncaughtException' mit einer VM zusammenhängt (und möglicherweise mit welcher davon) oder nicht?

Im Moment leider nicht. Ich habe eine Idee, wie ich das umsetzen kann, aber es wird einige Zeit dauern.

Ich verpacke vm.run() mit domain.run() und es scheint zu funktionieren. Ich weiß aber nicht ob es Nebenwirkungen hat..

let domain = Domain.create();
domain.on('error', (err) => {
    console.error('Asynchronous error while executing script.', err.stack);
});
domain.run(() => {
    try {
        vm.run(script, filename);
    } catch (err) {
        console.error('Synchronous error while executing script.', err.stack);
    }
});

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.

@alsterg Die Methode scheint an Effektivität zu verlieren..

@patriksimek Könnten Sie mir bitte sagen, ob Sie das vergessen haben?

Wenn Sie @ImSingee bestätigen ,
Gibt es ein Update zum Umgang mit asynchronen Fehlern?

Irgendwelche Updates dazu???

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

keyosk picture keyosk  ·  64Kommentare

wojpawlik picture wojpawlik  ·  4Kommentare

CapacitorSet picture CapacitorSet  ·  13Kommentare

XmiliaH picture XmiliaH  ·  19Kommentare

unxcepted picture unxcepted  ·  11Kommentare