Vm2: 处理异步回调中的错误

创建于 2017-02-03  ·  8评论  ·  资料来源: patriksimek/vm2

有没有办法处理异步回调中的错误?

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

我正在寻找一种防止整个脚本崩溃的方法。

feature request stale

最有用的评论

我正在用 domain.run() 包装 vm.run() 并且它似乎工作。 不过不知道有没有副作用

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

所有8条评论

您可以像这样处理异步错误:

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

请记住,这会捕获来自 VM 内部和外部的所有异常。

谢谢。 是的,它部分帮助了我。 顺便说一句,有什么方法可以区分“uncaughtException”中的错误是否与 VM(以及其中的哪一个)有关?

不幸的是,目前没有。 我有一个想法如何实现这一点,但需要一些时间。

我正在用 domain.run() 包装 vm.run() 并且它似乎工作。 不过不知道有没有副作用

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

此问题已自动标记为过时,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。

@alsterg该方法似乎失去了效力..

@patriksimek如果您忘记了这一点,请告诉我好吗?

确认@ImSingee ,不幸的是方法不再起作用。
是否有关于如何处理异步错误的更新?

这有什么更新???

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

seanc picture seanc  ·  3评论

CapacitorSet picture CapacitorSet  ·  13评论

patriksimek picture patriksimek  ·  15评论

XmiliaH picture XmiliaH  ·  19评论

KonradLinkowski picture KonradLinkowski  ·  10评论