javascript - getting undefined for a function used in another function
问题描述
I'm getting the required result from console.log in getuser(), but I'm getting undefined when used it in another function
let getuser = (id) => {
user.findById(id, (err, user) => {
if (err || !user) {
return "wrong user id";
} else {
let { name, _id } = user;
console.log(JSON.stringify({ name, _id }));
return { name, _id };
}
});
};
I'm getting undefined when i use getuser() in send()
exports.send = (req, res) => {
let {id}=req.body
let a=getuser(req.User._id)
let b=getuser(req.body.id)
console.log(a)
console.log(a)
let message = new messages({
user1: a,
user2: b,
});
message.save((err, saved) => {
if (err) {
return res.json(err);
} else {
return res.json(saved);
}
});
}
im getting undefined in
console.log(a) console.log(a)
解决方案
您可能希望对该getuser
方法使用 Promise:
let getuser = (id) => new Promise((resolve, reject) => {
user.findById(id, (err, user) => {
if (err || !user) {
reject("wrong user id");
} else {
let { name, _id } = user;
console.log(JSON.stringify({ name, _id }));
resolve({ name, _id });
}
});
});
该操作看起来是异步的,因此您需要等待结果才能继续。这意味着您的getuser
调用需要处理承诺/异步值:
let a = await getuser(req.User._id)
let b = await getuser(req.body.id)
当然,await
必须在标有 的函数中使用async
。如果其中任何一个不清楚,请阅读 Promises 和 async/await - 它们对于使用数据库、API 等是绝对必要的。可以通过更改导出行来立即使用它:
exports.send = async (req, res) => {
但我不知道这适用于什么环境,所以我不能说这是否可以开箱即用。
请注意,我根本没有对此进行测试,因为这是一个相当不完整的示例。我所建议的只是理论上的。
推荐阅读
- datagridview - Datagridview Cellformating 减慢表单并导致闪烁
- python - python根据另一个列表重命名列表元素
- html - 从 django 到 html 的数据问题
- python - 如何捆绑外部 CMake 依赖项以生成 Python 包?
- javascript - 格式不工作的 Google Appscript 电子邮件范围
- python - 对多种格式的日期(字符串)进行排序?Python
- javascript - 可以依靠 CSSStyleDeclaration.setProperty() 来验证 CSS 属性吗?
- c - 如何在c(arduino)中使用#define正确硬编码编译器的定义标志(-D)
- service - 如何解决 Power BI 中的工作区错误?
- apache - 乘客使用不正确的 Ruby 版本