首页 > 解决方案 > 异步/等待问题(返回未定义)猫鼬

问题描述

当我调用方法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;
        }
    })
}

我认为这是一个异步等待问题,但我不知道。有什么建议我可以解决这个问题吗?

标签: javascriptmongooseasync-await

解决方案


您正在混合 async/await 并使用promise.then- 您可以将其全部编写出来,async/await这样会更容易:

const getAllUserStats = async (login_name) => {
    const userStats = await userstats.findOne({login_name})
    if(userStats===null){
        let user = new userstats({
            login_name:login_name,
            followers: [],
            subscribers: [],
            hosts: [],
            viewers: []
        })
        await user.save();
        return user;
    }
    else{
        return userStats;
    }
}


推荐阅读