This question already has answers here:
How do I return the response from an asynchronous call?
(38个答案)
2年前关闭。
编辑
我已经做到了。我使用了很棒的异步模块。解决方案如下:
题
我的情况如下。我正在向db控制器发出发布请求,以便在db中创建文档。该请求显然包含来自表单的数据,存储在req.body中。我想在将数据推送到数据库之前检查数据是否正确,我通过调用一个函数来检查它来做到这一点。
字段之一是user._id的数组,我想检查是否所有这些都属于用户。
我的实现方式如下:
因此,基本上,我调用mongoose来计算数据库中具有给定id的文档数量,如果答案为零,则该字段不包含有效值,并且该函数返回false。否则,它应该返回true。
问题在于对数据库的所有调用都是异步的,因此该函数在检查所有用户的ID之前返回true。
我曾考虑过使用诺言,但我不知道从哪里开始。
有人有任何想法或建议吗?
提前致谢!
干杯。 :)
在我的示例中,我使用了
(38个答案)
2年前关闭。
编辑
我已经做到了。我使用了很棒的异步模块。解决方案如下:
async.each(req.body.users, function(userId, next) {
User.count( { _id: userId } ).exec(function(err, count) {
if(count === null) {
next("Doesn't exist);
} else {
next();
}
}, function(err) {
if(err) {
console.log(err);
} else {
console.log("success");
}
});
题
我的情况如下。我正在向db控制器发出发布请求,以便在db中创建文档。该请求显然包含来自表单的数据,存储在req.body中。我想在将数据推送到数据库之前检查数据是否正确,我通过调用一个函数来检查它来做到这一点。
字段之一是user._id的数组,我想检查是否所有这些都属于用户。
我的实现方式如下:
req.body.users.forEach(function(userId) {
User.count({ _id: userId }).exec(function(err, count) {
if(count === 0) {
return false;
}
}
}
return true;
因此,基本上,我调用mongoose来计算数据库中具有给定id的文档数量,如果答案为零,则该字段不包含有效值,并且该函数返回false。否则,它应该返回true。
问题在于对数据库的所有调用都是异步的,因此该函数在检查所有用户的ID之前返回true。
我曾考虑过使用诺言,但我不知道从哪里开始。
有人有任何想法或建议吗?
提前致谢!
干杯。 :)
最佳答案
因此,您要做的就是检查每个给定的idUser是否正常。
在我的示例中,我执行一个请求,该请求将返回具有req.body.users
内部ID之一的每个用户。
然后,我检查我要检查的用户数是否与我要获取数据的用户数相同。如果不匹配,则意味着我们有一个不在数据库中的idUser。
User.find({
_id: {
$in: req.body.users,
},
}, '_id')
.then((rets) => {
if (rets.length !== req.body.users.length) {
//
// /!\ Unknown idUser
//
throw new Error('...');
}
// All is alright
})
.catch((err) => {
...
});
在我的示例中,我使用了
Promise
对象和projection关于javascript - Mongoose 完成查询数据库后返回一个函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47474545/