Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未从节点中的异步方法获取错误_Javascript_Node.js - Fatal编程技术网

Javascript 未从节点中的异步方法获取错误

Javascript 未从节点中的异步方法获取错误,javascript,node.js,Javascript,Node.js,我使用以下代码 require('./ut/valid').validateFile() }); 在验证文件中,当我在配置中发现一些重复项时,我发送了错误消息 像下面 module.exports = { validateFile: function (req) { ... if(dup){ console.log("Duplicate found: "); return new Error("Duplicate found: "); } require('./ut/valid')

我使用以下代码

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

});
在验证文件中,当我在配置中发现一些重复项时,我发送了错误消息 像下面

module.exports = {
    validateFile: function (req) {
...
if(dup){
console.log("Duplicate found: ");
return new Error("Duplicate found: ");
}
require('./ut/valid').validateFile(function() {
    process.exit(1);
});
dup为true,应该抛出错误,我应该如何在异步方法中捕获它

我试着也喜欢跟随

module.exports = {
    validateFile: function (req) {
...
if(dup){
console.log("Duplicate found: ");
return new Error("Duplicate found: ");
}
require('./ut/valid').validateFile(function() {
    process.exit(1);
});

我在这里错过的是,我能够看到控制台日志…

您的方法不起作用,因为您正在执行异步操作。常见的解决方案是使用
回调
。在node.js中,通常使用名为的模式

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

  // './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);
});

我对node不太了解,但我可以告诉你们,你们返回的是一个错误对象,从JS的角度来看,这不是一个错误,它只是一个对象,要得到一个错误,你们必须抛出一个错误,比如:

throw true;


通过这种方式,它被当作一个错误处理,而不是返回值。

1。)您使用throw关键字抛出错误,2。)它不能与异步代码一起工作。感谢1+,我应该如何调用以验证文件并捕获错误,您能用此代码更新答案吗?@JhonDree这就是您的意思吗?