我正在尝试编写一个像这样的简单函数
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
是以第二个身份注销。但是,我认为这将是另一回事吗?我认为此功能将“等待”解决,一旦解决,它将向我显示结果。我在做什么错了?
答案 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')
})
}
您当前正在立即解决您的外部承诺,但带有内部承诺,并且该内部承诺根本不会返回任何内容,因此未定义。只需直接退还承诺即可。更干净,更简单。