Vm2: Обработка ошибки в асинхронном обратном вызове

Созданный на 3 февр. 2017  ·  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

Самый полезный комментарий

Я оборачиваю vm.run () с помощью domain.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);
})

Имейте в виду, что это перехватывает все исключения как внутри, так и за пределами виртуальной машины.

Спасибо. Да, частично мне это помогло. Кстати, есть ли способ определить, связана ли ошибка в uncaughtException с виртуальной машиной (и, возможно, с какой из них) или нет?

К сожалению, пока нет. У меня есть идея, как это реализовать, но это займет некоторое время.

Я оборачиваю vm.run () с помощью domain.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 рейтинги