簡體   English   中英

await 僅在 nodejs 中的異步 function 中有效

[英]await is only valid in async function in nodejs

我用 flutter + firebase 構建了一個應用程序,如果文檔是在 5 個多小時前創建的,我需要刪除它,所以我用 nodejs 構建了一個腳本。 問題是文檔沒有被刪除,因為我不等待刪除 function 來完成。 所以我嘗試添加 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

您不能在任何 function 包括回調 function 中使用沒有async關鍵字的await 所以snapshot.forEach(doc => {...}) should be: snapshot.forEach(async doc => {...})

錯誤:語法錯誤:等待僅在async function 中有效

為了能夠在 function 中使用 await ,語法必須如下所示

 async function () {

    await  functionReturnsPromise()      
  }

下面的代碼是錯誤的,你會得到上面的錯誤:

 async function () {   
          functionTest(()=>{
           await  functionReturnsPromise()  
        })

   }

我們必須在回調 function 之前放置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 
  }
} 

注意:以上代碼中的代碼可能存在語法錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM