有没有办法在其他函数中调用包含mongoose查询的函数,这样其他函数才能正常工作?
我的第一个包含mongoose查询的函数:
getUserTags = (id) => {
User.findById(id)
.exec( (error, user) => {
if (error) {
return next(error);
} else {
return user;
}
})
}
和我需要调用第一个函数的函数:
userTagToBookTagValues = (id) => {
const user = getUserTags(id);
//I NEED THIS PART TO WORK AFTER getting data from getUserTags
console.log(user);
user.tags.forEach(tag => {
console.log(tag)
});
}
有没有办法让它正常工作,第二个功能的用户不会被定义?
答案 0 :(得分:0)
您可能需要return User.findById
?
像这样:
getUserTags = (id) => {
return User.findById(id)
.exec( (error, user) => {
if (error) {
return next(error);
} else {
return user;
}
})
}
答案 1 :(得分:0)
findById是一种异步方法。
如果您的节点版本大于8
getUserTags = id => User.findById(id).exec();
userTagToBookTagValues = async (id) => {
try {
const user = await getUserTags(id);
user.tags.forEach(tag => {
console.log(tag)
});
} catch (err) {
next(err);
}
}
或者你可以在调用getUserTags函数后使用then方法。
有关asnc方法的更多信息:
答案 2 :(得分:0)
据我所知.exec()不返回任何内容,因此使用.then会出错。 但是,如果像这样重写,它可以完美地运行:
getUserTags = (id) => {
return User.findById(id)
}
userTagToBookTagValues = (id) => {
const user = getUserTags(id).then((user) => {
user.tags.forEach(tag => {
console.log(tag)
});
}) ;
}