Existe-t-il un moyen de gérer les erreurs dans le rappel asynchrone ?
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);
Je cherche un moyen d'empêcher tout le script de se bloquer.
Vous pouvez gérer les erreurs asynchrones comme ceci :
process.on('uncaughtException', (err) => {
console.log(err);
})
Gardez à l'esprit que cela intercepte toutes les exceptions à la fois à l'intérieur et à l'extérieur de la machine virtuelle.
THX. Oui, cela m'a en partie aidé. BTW, existe-t-il un moyen de distinguer si l'erreur dans 'uncaughtException' est liée à une machine virtuelle (et éventuellement, laquelle) ou non?
Malheureusement pas pour le moment. J'ai une idée de comment mettre en œuvre cela, mais cela prendra un certain temps.
J'enveloppe vm.run() avec domain.run() et cela semble fonctionner. Je ne sais pas si cela a des effets secondaires par contre...
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);
}
});
Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Merci pour vos contributions.
@alsterg La méthode semble perdre en efficacité..
@patriksimek Pourriez-vous s'il vous plaît me dire si vous avez oublié cela?
Confirmation de @ImSingee , la méthode ne fonctionne malheureusement plus.
Y a-t-il une mise à jour sur la façon de gérer les erreurs asynchrones ?
Des mises à jour à ce sujet ???
Commentaire le plus utile
J'enveloppe vm.run() avec domain.run() et cela semble fonctionner. Je ne sais pas si cela a des effets secondaires par contre...