异步/等待问题(返回未定义)猫鼬

时间:2021-01-15 13:00:45

标签: javascript mongoose async-await

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

我认为这是一个 async-await 问题,但我不知道。有什么建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您正在混合使用 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;
    }
}