gpt4 book ai didi

javascript - 为另一个函数中使用的函数获取未定义

转载 作者:行者123 更新时间:2023-12-04 09:45:23 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to return the response from an asynchronous call

(42 个回答)


去年关闭。




我在 getuser() 中从 console.log 获得了所需的结果,但是在另一个函数中使用它时却未定义

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 };
}
});
};

当我在 send() 中使用 getuser() 时,我变得未定义
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);
}
});
}

我变得未定义

控制台日志(一)
控制台日志(一)

最佳答案

您可能想对 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调用需要处理 promise /异步值:
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) => {

但我不知道这是针对什么环境的,所以我不能说这是否可以开箱即用。

请注意,我根本没有测试过这个,因为它是一个相当不完整的例子。我所建议的只是理论上的。

关于javascript - 为另一个函数中使用的函数获取未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62152303/

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