为什么这个承诺返回未定义?

时间:2020-10-13 19:53:12

标签: javascript reactjs promise async-await

我正在尝试编写一个像这样的简单函数

const joinLeague = async () => {
    const league = await attemptToJoinLeaugeIfItExists({ id, leaguePin })
    console.log(league, 'fl')

    if (league) {
        // do something 
    }
}

我已经做了一个像这样的firebase助手

export const attemptToJoinLeaugeIfItExists = ({ id, leaguePin }: any) => {
    return new Promise((res, rej) => {
        res(
            firebaseApp
                .database()
                .ref(`users/${id}`)
                .once('value')
                .then((snapshot) => { `
                    firebaseApp
                        .database()
                        .ref(`leagues`)
                        .once('value')
                        .then((snapshot) => {
                            console.log('in here')
                        })
                }),
        )
    })
}

但是,league以未定义的身份注销,而in here是以第二个身份注销。但是,我认为这将是另一回事吗?我认为此功能将“等待”解决,一旦解决,它将向我显示结果。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

这样做:

export const attemptToJoinLeaugeIfItExists = ({ id, leaguePin }: any) => {
    return firebaseApp
                .database()
                .ref(`users/${id}`)
                .once('value')
                .then((snapshot) => { `
                    return firebaseApp
                        .database()
                        .ref(`leagues`)
                        .once('value')
                })
}

您当前正在立即解决您的外部承诺,但带有内部承诺,并且该内部承诺根本不会返回任何内容,因此未定义。只需直接退还承诺即可。更干净,更简单。