使用域从eval捕获异步错误

时间:2015-08-25 03:32:50

标签: javascript node.js promise bluebird

我正在尝试使用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)

0 个答案:

没有答案