【发布时间】:2020-11-28 22:04:55
【问题描述】:
所以我有这个函数来将数据存储在 Firestore 数据库中,但我想检查该值是否已经存在,并基于此我想返回一个布尔值。
我一直试图用 async await 解决这个问题,但它似乎没有用。最后,当我在performanceRef.get() 之前添加return 时,它解决了这个问题。即使它解决了问题,我也不清楚为什么。我知道它一定与异步有关。有人能解释一下为什么添加这个 return 解决了这个问题吗?
export const createUserPerformanceDocument = async (user, currentDate, answer ) => {
const createdAt = currentDate.toLocaleDateString('en-US');
const performanceRef = firestore.doc(`performance/${user}`);
return performanceRef.get()
.then(doc => {
if(doc.exists) {
const docData = doc.data();
if (docData[createdAt]) {
return false
} else {
try {
performanceRef.set({
[createdAt]: {
Question: answer
}
}, { merge: true })
return true
} catch(error) {
console.log('Error creating performance data!', error.message);
return false
}
}
} else {
console.log("This user does not exist in the database");
}
})
}
【问题讨论】:
-
您的 async/await 版本可能只是做错了事,但由于您没有显示它,因此不可能知道。就目前而言,您并没有真正按照预期的方式使用 async/await。您可以删除 async 关键字,它仍然可以工作,因为您现在只是使用普通的 Promise 语法。
-
@DougStevenson 完全相同的代码,只是等待而不是返回。
标签: javascript firebase google-cloud-firestore promise async-await