【发布时间】:2016-12-03 13:30:14
【问题描述】:
我正在尝试使用 Mongoose 的内置承诺支持为向另一个发送好友请求的用户编写一些干净的 Javascript 代码。但是,当我尝试确保正确的错误处理和顺序性时,我仍然会遇到一个(比正常情况略小)的厄运金字塔。
这里,我首先确保好友请求有效,然后将目标的Id保存到请求者发送的请求中,如果保存成功,将请求者的Id保存到目标的好友请求中。
我是否需要使用像 q 这样的第三方库才能尽可能干净地执行此操作?我该如何构建它以便我可以在最后使用传统的单一错误处理程序?
function _addFriend (requesterId, targetId) {
// (integer, integer)
User.findById(requesterId)
.exec((requester) => {
if (!(targetId in requester.friends
|| targetId in requester.sentfriendRequests
|| targetId in requester.friendRequests)) {
requester.sentfriendRequests = requester.sentfriendRequests.concat([targetId])
requester.save()
.then((err) => {
if (err) throw err;
User.findById(targetId)
.exec((err, target) => {
if (err) throw err;
target.friendRequests = target.friendRequests.concat([requesterId])
target.save().then(err => {if (err) throw err})
})
})
}
})
}
【问题讨论】:
-
你确定第一个
exec回调不需要err参数吗? -
.then(err => {if (err) throw err})看起来你不应该需要它来承诺
标签: javascript node.js mongodb mongoose promise