Vm2: Menangani kesalahan dalam panggilan balik asinkron

Dibuat pada 3 Feb 2017  ·  8Komentar  ·  Sumber: patriksimek/vm2

Apakah ada cara untuk menangani kesalahan dalam panggilan balik async?

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

Saya mencari cara untuk mencegah seluruh skrip mogok.

feature request stale

Komentar yang paling membantu

Saya membungkus vm.run() dengan domain.run() dan sepertinya berhasil. Saya tidak tahu apakah itu memiliki efek samping..

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

Semua 8 komentar

Anda dapat menangani kesalahan asinkron seperti ini:

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

Ingatlah bahwa ini menangkap semua pengecualian dari dalam dan luar VM.

Terima kasih. Ya, itu sebagian membantu saya. BTW, apakah ada cara untuk membedakan apakah kesalahan dalam 'uncaughtException' terkait dengan VM (dan mungkin, yang mana) atau tidak?

Sayangnya tidak saat ini. Saya punya ide bagaimana menerapkan ini tetapi itu akan memakan waktu.

Saya membungkus vm.run() dengan domain.run() dan sepertinya berhasil. Saya tidak tahu apakah itu memiliki efek samping..

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

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.

@alsterg Metode ini tampaknya kehilangan efektivitas ..

@patriksimek Bisakah Anda memberi tahu saya jika Anda lupa tentang ini?

Mengonfirmasi @ImSingee , sayangnya metode tidak berfungsi lagi.
Apakah ada pembaruan tentang cara menangani kesalahan async?

Ada update tentang ini???

Apakah halaman ini membantu?
0 / 5 - 0 peringkat