【发布时间】:2021-07-13 19:01:12
【问题描述】:
我有一个 user_dict 对象,它是通过从 Firebase 数据库下载一些数据而创建的。创建该 user_dict 对象后,我立即将它的一个实例保存在该 uid 下保存的配置文件子项中。
所需信息已正确保存到我的数据库中,但我的 is_profile_ready bool 永远不会返回 true,并且我陷入了我的 while 循环。有没有更好的方法来处理这个?我知道这是不好的形式,但我一直在努力让 Promise 和 async/await 正常工作。
这是由于我的 while 循环,还是我做错了什么来阻止 is_profile_ready 返回 true?
async function handleTestStart() {
traceFunction()
character.style.backgroundImage = "url(character.png)"
left_button.style.visibility = 'visible'
right_button.style.visibility = 'visible'
showLogoAnimation()
setTimeout(function () {
let start_time = new Date().getTime()
while (!is_user_dict) {
let end_time = new Date().getTime()
let time = end_time - start_time
if (time > 10000) {
timeoutError()
}
}
let is_profile_ready = createProfile()
let start_time2 = new Date().getTime()
while (!is_profile_ready) {
let end_time2 = new Date().getTime()
let time2 = end_time2 - start_time2
if (time2 > 10000) {
timeoutError()
}
}
hideLogoAnimation()
condition_category_array.forEach(function (condition_category) {
user_dict['more_info'].push(condition_category)
})
category = user_dict['more_info'][0]
backup_user_dict = deepCopyObject(user_dict)
nextQuestion()
}, 2000)
}
function createProfile() {
let current_user_id = firebase.auth().currentUser.uid
console.log('createProfile currentUser is ', current_user_id)
firebase.database().ref().child('profile').child(current_user_id).set({
'user_dict' : user_dict
}).then(() => { return true })
}
编辑:弗兰克提出了一个解决方案,我在 is_profile_ready.then 上遇到错误(无法读取未定义的属性“then”)。复制以下代码方便阅读。
async function handleTestStart() {
traceFunction()
character.style.backgroundImage = "url(character.png)"
left_button.style.visibility = 'visible'
right_button.style.visibility = 'visible'
showLogoAnimation()
let start_time = new Date().getTime()
while (!is_user_dict) {
let end_time = new Date().getTime()
let time = end_time - start_time
if (time > 10000) {
timeoutError()
}
}
let is_profile_ready = createProfile()
let start_time2 = new Date().getTime()
is_profile_ready.then((result) => {
let end_time2 = new Date().getTime()
let time2 = end_time2 - start_time2
if (time2 > 10000) {
timeoutError()
}
hideLogoAnimation()
condition_category_array.forEach(function (condition_category) {
user_dict['more_info'].push(condition_category)
})
category = user_dict['more_info'][0]
backup_user_dict = deepCopyObject(user_dict)
nextQuestion()
})
}
function createProfile() {
let current_user_id = firebase.auth().currentUser.uid
console.log('createProfile currentUser is ', current_user_id)
firebase.database().ref().child('profile').child(current_user_id).set({
'user_dict': user_dict
}).then(() => { return true })
}
【问题讨论】:
标签: javascript firebase firebase-realtime-database