【发布时间】:2021-04-20 12:16:06
【问题描述】:
当我调用方法interval时,我从方法allUserStats得到的参数user总是未定义的。这是方法
const interval = async () => {
const allUsers = await getAllUser();
for (const u of allUsers) {
let user;
let followerScore;
let subscriberScore;
//let hostsScore;
let viewerScore;
await getAllUserStats(u.login_name).then(async (userStats)=>{
user = userStats;
...
getAllUserStats 方法如下所示:
const getAllUserStats = async (login_name) => {
await userstats.findOne({login_name}).then(async(userStats)=>{
if(userStats===null){
let user = new userstats({
login_name:login_name,
followers: [],
subscribers: [],
hosts: [],
viewers: []
})
await user.save();
return user;
}
else{
return userStats;
}
})
}
我认为这是一个异步等待问题,但我不知道。有什么建议可以解决吗?
【问题讨论】:
-
您是否尝试过从
getAllUserStats函数返回一些内容?例如return await userstats... -
是的,
getAllUserStats不返回任何内容。您可以 a) 返回一个 Promise/then-chain 和await函数调用或 b)await结果,然后实际返回它。您仍在尝试从回调函数返回,这将简单地丢弃该值。有效的return必须直接在函数内部,不能用回调函数包装。 -
@ChrisG 谢谢,现在可以了。您能否将您的评论添加为答案,以便我接受并关闭该主题?
-
我已经展示了@ChrisG 评论 (B) 选项可能看起来像。这通常是最好的选择——如果你正在使用 async/await,那就去使用它吧!忘记
.then -
@TKoL 这正是我现在所做的。非常感谢!
标签: javascript mongoose async-await