最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascipt和Node.js处理错误(然后捕获)

运维笔记admin10浏览0评论

Javascipt和Node.js处理错误(然后/捕获)

Javascipt和Node.js处理错误(然后/捕获)

假设我在routes.js文件中有此伪代码:

var pkg = require('random-package');

app.post('/aroute', function(req, res) {
    pkg.impl_func(data, function (err, result) {
        myFunction(entity).then(user=>{
            //DO_STUFF_HERE
            res.render('page.ejs');
        }).catch(err => {
            console.log(err);
            res.render('error.ejs');
        });
    });
});

function myFunction(username) {
   //.....
}

我使用的pkg是在npmjs网站上找到的。 myFunction()始终是我的职责。

在我的代码中,您可以看到当myFunction()失败时,我已经实现了then / catch语句。因此,发生这种情况时,会渲染error.ejs

但是当npm软件包失败时会发生什么?在终端中,我收到错误消息,但是服务器端没有错误处理。这意味着,当失败时,不会以error.ejs通知用户,这很明显,因为我的代码中省略了此功能。

但是当pkg失败时,呈现error.ejs的方法是什么?

由于我已经在下面使用.then()/.catch()技术,因此我也可以在上面使用吗?换句话说,我可以嵌套.then()/.catch()语句吗?我可以将外部代码括到try/catch内(同时仍然有try/catch吗?)

回答如下:

pkg.impl_func()似乎是在实现典型的Node.js回调接口(即,如果发生错误,则返回错误作为第一个参数,如果没有错误,则返回null)。您可以简单地检查是否存在错误,并在出现error.ejs时进行渲染:

app.post('/aroute', function(req, res) {
  pkg.impl_func(data, function (err, result) {
    if (err) {
      res.render('error.ejs');
    } else {
      myFunction(entity).then(user=>{
        //DO_STUFF_HERE
        res.render('page.ejs');
      }).catch(err => {
        console.log(err);
        res.render('error.ejs');
      });
    }
  });
});

或者,您可以使用util.promisify()util.promisify()转换为异步功能。然后,您可以在pkg.impl_func()函数中使用promise.catch()try-catch简化语法:

async
发布评论

评论列表(0)

  1. 暂无评论