Vm2: Tratar erro no retorno de chamada assíncrono

Criado em 3 fev. 2017  ·  8Comentários  ·  Fonte: patriksimek/vm2

Existe alguma maneira de lidar com o erro no retorno de chamada assí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);

Estou procurando uma maneira de evitar travamento de todo o script.

feature request stale

Comentários muito úteis

Estou envolvendo vm.run () com domain.run () e parece funcionar. Não sei se tem algum efeito colateral ..

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 comentários

Você pode lidar com erros assíncronos como este:

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

Lembre-se de que isso captura todas as exceções de dentro e de fora da VM.

Valeu. Sim, me ajudou parcialmente. BTW, existe alguma maneira de distinguir se o erro em 'uncaughtException' está relacionado a uma VM (e, possivelmente, qual delas) ou não?

Infelizmente, não no momento. Tenho uma ideia de como implementar isso, mas vai demorar um pouco.

Estou envolvendo vm.run () com domain.run () e parece funcionar. Não sei se tem algum efeito colateral ..

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 foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.

@alsterg O método parece perder eficácia.

@patriksimek Você poderia me dizer se esqueceu disso?

Confirmando @ImSingee , o método infelizmente não funciona mais.
Existe alguma atualização sobre como lidar com erros assíncronos?

Alguma atualização sobre isso ??

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

CapacitorSet picture CapacitorSet  ·  13Comentários

ghost picture ghost  ·  23Comentários

seanc picture seanc  ·  3Comentários

unxcepted picture unxcepted  ·  11Comentários

somebody1234 picture somebody1234  ·  4Comentários