node.js - await 仅在 nodejs 的异步函数中有效
问题描述
我有一个用flutter + firebase构建的应用程序,如果它是在5个多小时前创建的,我需要删除它,所以我用nodejs构建了一个脚本。问题是文档没有被删除,因为我不等待删除功能完成。所以我尝试添加 async/await 但我有一个错误。
我试图这样做:
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 is only valid in async function
解决方案
你不能在任何函数中使用 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
}
}
注意:以上代码中的代码可能存在语法错误
推荐阅读
- java - 有没有办法避免不同背景的重复 Cucumber 场景?
- javascript - 将我的 Chrome 扩展程序中的表单数据写入 Google 表格
- python - Pandas Dataframe 多索引
- scala - Scala 等价于 Java 的 Number 和 divide 方法
- kotlin - Kotlin DSL - 联合结构
- isabelle - 如何使用 fmmap_keys 定义函数的终止顺序?
- elasticsearch - 如何在 ES 6.4 中使用新的 Java Api 重新索引?
- angular - Angular——今天的日期和从 API 返回的日期之间的差异
- firebase - 确保 Firebase 托管链接只能从特定 IP 访问
- python - linux - 信号未传递给多命令