Vm2: Manejar el error en la devolución de llamada asíncrona

Creado en 3 feb. 2017  ·  8Comentarios  ·  Fuente: patriksimek/vm2

¿Hay alguna forma de manejar el error en la devolución de llamada asíncrona?

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);

Estoy buscando una forma de evitar que se bloquee todo el script.

feature request stale

Comentario más útil

Estoy envolviendo vm.run () con domain.run () y parece funcionar. Sin embargo, no sé si tiene efectos secundarios.

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);
    }
});

Todos 8 comentarios

Puede manejar errores asincrónicos como este:

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

Tenga en cuenta que esto detecta todas las excepciones tanto dentro como fuera de la máquina virtual.

Gracias. Sí, me ayudó parcialmente. Por cierto, ¿hay alguna forma de distinguir si el error en 'uncaughtException' está relacionado con una VM (y posiblemente, cuál de ellos) o no?

Lamentablemente no por el momento. Tengo una idea de cómo implementar esto, pero llevará algún tiempo.

Estoy envolviendo vm.run () con domain.run () y parece funcionar. Sin embargo, no sé si tiene efectos secundarios.

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);
    }
});

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

@alsterg El método parece perder efectividad.

@patriksimek ¿Podrías decirme si te olvidaste de esto?

Confirmando @ImSingee , el método desafortunadamente ya no funciona.
¿Hay alguna actualización sobre cómo manejar los errores asincrónicos?

¿Alguna actualización sobre esto ???

¿Fue útil esta página
0 / 5 - 0 calificaciones