node.js – 捕获在mongoosecallback中引发的错误

在我的控制器中,我有一个终点函数调用另一个函数,期望得到一个结果或从被调用函数捕获错误。

exports.createInvites = (req, res) => { // code... try { generateInvitations(requirements, data => { res.status(200).json({data}); }); } catch (err) { console.log(`caught the error: ${err}`); return res.status(500).json(err); } } 

在被调用函数generateInvites ,我使用mongoose把生成的对象保存到mongodb中,如果有的话就抛出一个错误。

 function generateInvitations(requirements, cb) { const { expirationDate, credits, numOfUse, numOfInvites } = requirements; let invitationCodes = []; for (let i = 0; i < numOfInvites; i++) { const code = randomString(CODE_LENGTH); invitationCodes.push(code); const invitation = new Invitation({ // code, numOfUse, expirationDate, credits }); invitation.save((err, obj) => { if (err) { throw err; // it should throw a ValidationError here } }); } cb(invitationCodes); } 

上面的代码是我尝试处理在generateInvites引发的错误。 当然,我无法捕捉到任何错误。 我做错了什么? 我该怎么做呢?

您需要处理的事实是,callback会在抛出错误之前触发很长的时间,因为它在自己的callback中。 我会build议Promise.all等待所有保存操作,这返回承诺。

 function generateInvitations(requirements) { const { expirationDate, credits, numOfUse, numOfInvites } = requirements; let promises = []; for (let i = 0; i < numOfInvites; i++) { const code = randomString(CODE_LENGTH); const invitation = new Invitation({ // code, numOfUse, expirationDate, credits }); promises.push(invitation.save()); } return Promise.all(promises): } 

接着:

 generateInvitations(requirements) .then(data => res.status(200).json({data})) .catch(err => { console.log(`caught the error: ${err}`); return res.status(500).json(err); });