Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 如何在异步操作期间生成Express.js日志错误_Javascript_Node.js_Express_Asynchronous_Error Handling - Fatal编程技术网

Javascript 如何在异步操作期间生成Express.js日志错误

Javascript 如何在异步操作期间生成Express.js日志错误,javascript,node.js,express,asynchronous,error-handling,Javascript,Node.js,Express,Asynchronous,Error Handling,我有这样的代码: exports.listSavedThreads = function (req, res) { SavedThread.find({}).exec().then(function (data) { wat.map(); res.render('home/listSavedThreads'); }); }; wat是未定义的变量,因此上面的代码不起作用,并且从未调用res.render(),但是控制台没有打印任何内容,它会无声地失败,浏览器陷入无休止的

我有这样的代码:

exports.listSavedThreads = function (req, res) {
  SavedThread.find({}).exec().then(function (data) {
    wat.map();
    res.render('home/listSavedThreads');
  });
};
wat
是未定义的变量,因此上面的代码不起作用,并且从未调用
res.render()
,但是控制台没有打印任何内容,它会无声地失败,浏览器陷入无休止的加载

如果我在没有承诺的情况下也这样做:

exports.listSavedThreads = function (req, res) {
  wat.map();
  res.render('home/listSavedThreads');
};
错误会像往常一样打印到控制台和浏览器

我能够打印错误的唯一方法是使用
try/catch

exports.listSavedThreads = function (req, res) {
  SavedThread.find({}).exec().then(function (data) {
    try {
      wat.map();
      res.render('home/listSavedThreads');
    } catch(e) {
      console.log('Error: ', e);
    }
  });
};
然后在控制台中我看到:

Error:[ReferenceError:未定义wat]


显然,我不能把
try/catch
放在每一个操作中,因为我在开发中主要需要错误输出,所以我可以看到我的打字错误之类的东西。是否有一种方法可以输出所有操作的错误,即使是异步操作?

通常在执行不使用承诺的异步调用时,通常/最佳做法是确保正确地传达和处理错误。这是最常见的方法,在像这样的库中大量使用

因为您在代码片段中使用了承诺,所以我将提供一种使用承诺的错误处理方法。使用承诺的最好理由之一是,它们提供了非常好的开箱即用的异常处理

在承诺链中添加一个
.catch()
调用。在承诺范围内发生的任何错误都将传播到最近的
.catch()
处理程序
.catch()
是在
.then()
中提供
onRejected
回调函数的替代方法

有一些例子说明了使用承诺时错误处理的好处

exports.listSavedThreads = function (req, res) {
  SavedThread.find({})
    .exec()
    .then(function (data) {
      wat.map();
      res.render('home/listSavedThreads');
    })
    .catch(function(err) {
      //handle errors
    });
};
或者,在继续并相应地处理该场景之前,您可以检查是否定义了
wat

exports.listSavedThreads = function (req, res) {
  SavedThread.find({})
    .exec()
    .then(function (data) {
      if(wat) {
        wat.map();
        return res.render('home/listSavedThreads');
      }
      else {
        // Handle wat undefined
      }
    });
};

您正在正确使用try/catch。如果你的设计要求你一遍又一遍的写同样的代码,你可能会考虑功能崩溃或者如果你挖OO,使用多态性也会清理它。@ NasyielJordon,在我写的每一个异步函数中放<代码>尝试/catch < /代码>是一个开销,如果我需要的只是错误日志。浏览器可以打印承诺中的错误,那么为什么不能打印节点呢?我想,我的配置可能有问题,但我不确定该去哪里查找。谢谢你的回复,但是,正如我所说,我只需要进行开发,这样我就可以节省时间查找拼写错误或明显的逻辑错误。将
.catch()
添加到我在应用程序中做出的每一个承诺中,在节省时间方面对我没有多大帮助。我想,我可以使用类似eslint的东西来实现这一点,但Node.js无法打印默认情况下承诺中出现的错误,这似乎很奇怪。浏览器可以做得很好。