没有从节点中的异步方法获得错误

时间:2015-07-30 12:47:06

标签: javascript node.js

我使用以下代码

require('./ut/valid').validateFile()

});

在验证文件中,当我在配置中发现一些重复时,我发送错误 喜欢以下

module.exports = {
    validateFile: function (req) {
...
if(dup){
console.log("Duplicate found: ");
return new Error("Duplicate found: ");
}

dup是真的并且应该抛出错误,我应该如何"在异步方法中捕获"

我也尝试过跟随

require('./ut/valid').validateFile(function() {
    process.exit(1);
});

我在这里想念的是,我能够看到控制台日志...

2 个答案:

答案 0 :(得分:5)

你的方法不起作用,因为你正在做异步的事情。常见的解决方案是使用callbacks。在node.js中,通常使用名为error first callbacks的模式。

这意味着您需要将callback函数传递给文件验证方法,并返回错误或文件:

  // './utils/validate.js'
  module.exports = {

    /**
     * Validates a file.
     *
     * @param {Function} next - callback function that either exposes an error or the file in question
     */
    file: function (next) {
      // ...

      if (duplicate) {
        console.log('Duplicate found!');

        var error = new Error('Duplicate File');
        // Perhaps enrich the error Object.

        return next(error);
      }

      // Eveything is ok, return the file.
      next(null, file);
    }
};

您可以像这样使用它:

 // './app.js'
var validate = require('./utils/validate');

validate.file(function (err, file) {
  if (err) {
    // Handle error.
    process.exit(1);
  }

  // Everything is ok, use the file.
  console.log('file: ', file);
});

答案 1 :(得分:0)

我对节点知之甚少,但我可以告诉你,你正在返回一个错误对象,这不是来自JS透视的错误,它只是一个对象,要获得错误你必须抛出一个错误像:

throw new Error("Duplicate found: ");

20150730060112.log

这种方式将其作为错误处理而不是作为返回值