【问题标题】:await is only valid in async function in nodejsawait 仅在 nodejs 的异步函数中有效
【发布时间】:2020-08-13 17:16:50
【问题描述】:

我用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 仅在异步函数中有效

【问题讨论】:

  • snapshot.forEach(doc =&gt; {...}) 应该是:snapshot.forEach(async doc =&gt; {...})

标签: node.js firebase flutter


【解决方案1】:

你不能在任何函数中使用没有async关键字的await,包括回调函数。所以snapshot.forEach(doc =&gt; {...}) should be: snapshot.forEach(async doc =&gt; {...})

错误:SyntaxError: await 仅在 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 
  }
} 

注意:以上代码中的代码可能存在语法错误

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2019-06-14
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2020-04-15
    • 2022-06-18
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多