首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contextify :如何捕获异步错误

Contextify :如何捕获异步错误
EN

Stack Overflow用户
提问于 2014-09-30 15:53:19
回答 1查看 162关注 0票数 0

我需要在节点中运行不安全的JS脚本,并能够从错误中恢复。该脚本可以使用异步函数,因此我使用上下文而不是在VM模块中内置的节点。问题是脚本中异步代码中的错误会使节点进程崩溃。

这是我的测试:

代码语言:javascript
复制
var contextify = require('contextify');
var context = {
    console:{
        log:function(msg){
            console.log('Contextify : '+msg);
        }
    },
    setTimeout:setTimeout
};
console.log("begin test");
contextify(context);
try{ // try to run unsafe script
    //context.run("console.log('Sync user script error');nonExistingFunction();"); // works
    context.run("setTimeout(function(){ console.log('Async user script error');nonExistingFunction(); },2000);"); // crash node process
}catch(err){
    console.log("Recover sync user script error"); 
}
console.log("end test");

如何捕获异步错误?

EN

回答 1

Stack Overflow用户

发布于 2014-09-30 18:21:17

我解决这个问题的方法是使用child_process为脚本创建一个线程,以便在其中执行:

//main.js

代码语言:javascript
复制
var child_process = require('child_process');

var script = child_process.fork("scriptrunner.js");
script.on('error',function(err){
    console.log("Thread module error " + JSON.stringify(err));
});
script.on('exit',function(code,signal){
    if(code==null)
        console.log("Script crashed");
    else console.log("Script exited normally");
});
script.send("setTimeout(function(){ console.log('Async user script error');nonExistingFunction(); },2000);");

//scriptrunner.js

代码语言:javascript
复制
var contextify = require('contextify');

var context = {
    console:{
        log:function(msg){
            console.log('Contextify : '+msg);
        }
    },
    setTimeout:setTimeout
};
contextify(context);

process.on('message', function(js) {            
    try{        
        context.run(js);
    }catch(err){
        console.log("Catch sync user script error " + err);
    }
});

所以现在,如果脚本崩溃,它会崩溃自己的进程,而不是主节点进程。缺点是我不能在我的主进程和脚本的线程之间传递复杂的对象(比如我的上下文),我需要找到一个解决方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26115544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档