如何在nodejs中抛出同步回调异常?

时间:2017-09-13 15:36:47

标签: javascript node.js express try-catch

我想为redis.set回调抛出一个错误异常,并在try-catch块中捕获,然后控制错误处理表达中间件。

try {
  redis.get('key', (err, reply) => { 
    if(err) throw err;
    if(!reply) throw new Error('Can't find key');
  });
}
catch{
  next(error);
}

问题是,try-catch根本不起作用,错误发送到节点控制台,但服务器响应200状态。

1 个答案:

答案 0 :(得分:0)

你无法捕获异步事件。使用承诺:

const getKey = new Promise((res,rej) => {
  redis.get('key', (err, reply) => { 
    if(err) return rej(err);
    res(reply);
  });
});

所以可以这样做:

getKey.catch(next);

getKey.then(reply => {
  //do whatever
  next();
});