way*_*ure 23 javascript mongoose promise bluebird
我们希望减少承诺中的捕获块数量.如果我们删除嵌套的catch,那么异常会冒泡到父catch吗?
temporaryUserModel.findOne({email: req.body.email})
.then(tempUser => {
if (tempUser) {
temporaryUserModel.findOneAndUpdate({_id: tempUser.toJSON()._id}, user)
.then((doc) => {
return res.status(200).json({
status: 'Success',
data: {url: planOpted.chargifySignupUrl}
});
})
.catch(err => error(err, res));
} else {
temporaryUserModel(user).save()
.then((doc) => {
return res.status(200).json({
status: 'Success',
data: {url: planOpted.chargifySignupUrl}
});
})
.catch(err => error(err, res));
}
})
.catch(err => error(err, res));
Run Code Online (Sandbox Code Playgroud)
我们想要移除两个嵌套的捕获并仅保留底部的捕获.这个可以吗?
Ber*_*rgi 18
不,他们不会.如果你链接你的承诺,它们只会冒充结果承诺,你需要return回调所创造的内在承诺.否则外部承诺不能等待它们,也不会知道它们何时/如何解决(无论它们是否满足).
temporaryUserModel.findOne({email: req.body.email}).then(tempUser => {
if (tempUser) {
return temporaryUserModel.findOneAndUpdate({_id: tempUser.toJSON()._id}, user);
// ^^^^^^
} else {
return temporaryUserModel(user).save();
// ^^^^^^
}
}).then((doc) => {
// no need to duplicate this code when you chain anyway
return res.status(200).json({
status: 'Success',
data: {url: planOpted.chargifySignupUrl}
});
}).catch(err => error(err, res));
Run Code Online (Sandbox Code Playgroud)
您可以将一些逻辑提取到单独的函数中,return内部的承诺会冒出承诺链中的所有异常:
temporaryUserModel.findOne({email: req.body.email})
.then(updateTempUser)
.then(formatResponse)
.catch(err => error(err, res));
function updateTempUser(tempUser) {
if (tempUser) {
return temporaryUserModel.findOneAndUpdate({
_id: tempUser.toJSON()._id
}, user);
} else {
return temporaryUserModel(user).save()
}
}
function formatResponse(doc) {
return res.status(200).json({
status: 'Success',
data: {url: planOpted.chargifySignupUrl}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |