我正在尝试使用npm eval
模块捕获异步错误。它与普通eval非常相似,只是它直接使用节点的vm
模块。
我刚遇到节点的domain
模块。它允许我捕获_eval
内发生的异步错误。
但是我检查了文档,但找不到域done
事件。我怎么知道何时解决这个承诺?
var code = [
"setTimeout(function () {",
" throw new Error('async error sim')",
"}, 1000)"
].join('\n')
var domain = require('domain')
var _eval = require('eval')
var main = {}
var evalAsync = main.evalAsync = function (code, file) {
return new Promise(function (resolve, reject) {
var d = domain.create();
d.on('error', function (e) {
return reject(e)
})
var op = d.run(function () {
return _eval(code, file, {}, true)
})
// return resolve(op)
})
}
evalAsync(code, 'hi.js', {}, true)
.catch(function (e) {
console.log(e)
})
有没有办法让evalAsync
模块捕获错误并正确返回值?
我也试过这个:
var op = d.run(function () {
return _eval(code, file, {}, true)
})
return resolve(op)