gpt4 book ai didi

javascript - 使用 bluebird Promise 一次性捕获许多 mongoose 回调方法中的所有错误

转载 作者:行者123 更新时间:2023-12-03 05:27:30 25 4
gpt4 key购买 nike

最初,我实现了这两种方法:

  User.update({id: req.body.myId}, {$addToSet: { FriendIds:       
req.body.friendId}}, function(err, user){

if (err) {

return res.status(404).send('Unable to start chat')

}

User.update({id: req.body.friendId}, {$addToSet: { FriendIds:
req.body.myId}}, function(err, user){


if (err) {
return res.status(404).send('Unable to start chat')

}

return res.send('Chat Initiated')



});


});

我被告知 bluebird 中的 promise 将是完成所有这一切的更好方法。因此,经过进一步研究,我用 bluebird 实现了它,如下所示:

  Promise.all([User.update({id: req.body.myId}, {$addToSet: {     FriendIds: req.body.friendId}}), User.update({id: req.body.friendId},                {$addToSet: { FriendIds: req.body.myId}})  ])
.then(function (results){

console.log(results[0]);

}).catch(function (err){

console.log(err);

});

作为 bluebird 的新手,这段代码有两件事让我担心。首先,即使两个更新函数都被触发,console.log(results[0]); 给了我这个:

{ ok: 1, nModified: 0, n: 1 },这让我担心,因为我认为它会像第一个代码片段中那样打印出用户。第二个问题是,如果其中一个 Promise 出现错误,catch 方法是否会被触发?或者即使如此,我是否正确实现了它?我在文档中找不到合适的示例。

最佳答案

你的代码看起来没问题。

结果 { ok: 1, nModified: 0, n: 1 } 意味着查询运行良好,找到 1 个文档 (n) 与您的查询匹配,但是它已包含 ID,因此未更新 (nModified)。 addToSet “如果尚不存在,则将值添加到数组中”。

all promise 中发生的任何错误都将被捕获,包括两个查询。请注意,不更新记录并不是错误。也不是找不到查询的记录,因此您确实需要使用 mongodb/mongoose 检查 null/空/负结果。

  Promise.all([
User.update({id: req.body.myId}, {$addToSet: { FriendIds: req.body.friendId}}).exec(),
User.update({id: req.body.friendId}, {$addToSet: { FriendIds: req.body.myId}}).exec()
])
.then(function (results) {
console.log(results[0]);
console.log(results[1]);
})
.catch(function (err) {
console.log(err);
res.status(500).send('Unable to start chat')
// or next(err) if you use a global express error handler.
});

关于javascript - 使用 bluebird Promise 一次性捕获许多 mongoose 回调方法中的所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41093073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com