Vm2: Gérer l'erreur dans le rappel asynchrone

Créé le 3 févr. 2017  ·  8Commentaires  ·  Source: patriksimek/vm2

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.

feature request stale

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...

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

Tous les 8 commentaires

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 ???

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

wojpawlik picture wojpawlik  ·  4Commentaires

ghost picture ghost  ·  23Commentaires

somebody1234 picture somebody1234  ·  4Commentaires

KonradLinkowski picture KonradLinkowski  ·  10Commentaires

wintertime-inc picture wintertime-inc  ·  5Commentaires