我有一个使用flutter + firebase构建的应用程序,如果文档创建时间超过5个小时,则需要删除该文档,因此我使用nodejs构建了脚本。问题是文档没有被删除,因为我不等待删除功能完成操作。 所以我尝试添加异步/等待,但出现错误。
我试图这样做:
async function mydelete(){
let getDoc = cityRef.get()
.then(snapshot => {
snapshot.forEach(doc => {
docid = doc.id;
if (doc.id.length == 4)
db.collection('collection').doc(doc.id).delete();
else if (doc.data().Timestamp._seconds < new Date() - 18000) {
console.log(doc.id)
a = await db.collection('collection').doc(doc.id).delete()
}
else console.log('false')
})
})
.catch(err => {
console.log('Error getting documents', err);
});
}
但是现在我有这个错误: SyntaxError:await仅在异步功能中有效
答案 0 :(得分:1)
没有await
关键字的任何函数(包括回调函数)也不能使用async
。所以snapshot.forEach(doc => {...}) should be: snapshot.forEach(async doc => {...})
错误:语法错误:等待仅在
async
函数中有效
要在函数内使用await,语法必须始终如下所示
async function () {
await functionReturnsPromise()
}
下面的代码是错误的,您将得到上面的错误:
async function () {
functionTest(()=>{
await functionReturnsPromise()
})
}
我们将必须在回调函数之前放置async
关键字,以便能够
运行以下代码
async function () {
functionTest( async ()=>{
await functionReturnsPromise()
})
将您的代码更改如下:
async function mydelete() {
try {
let snapshot = await cityRef.get()
snapshot.forEach(async (doc) => {
let docid = doc.id;
if (doc.id.length == 4)
await db.collection('collection').doc(doc.id).delete();
else if (doc.data().Timestamp._seconds < new Date() - 18000) {
console.log(doc.id)
let a = await db.collection('collection').doc(doc.id).delete()
} else console.log('false')
})
}
catch (err) {
// handle error here
}
}
注意:以上代码中的代码中可能存在语法错误