await действует только в функции asyn c в nodejs - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть встроенное приложение с flutter + firebase, мне нужно удалить документ, если он был создан более 5 часов go, поэтому я создал скрипт с nodejs. Проблема в том, что документы не удаляются, потому что я не жду, пока функция удаления не найдет fin sh. Поэтому я попытался добавить 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 : ожидание действует только в asyn c function

1 Ответ

1 голос
/ 29 апреля 2020

Вы не можете использовать await без ключевого слова async ни в одной функции, включая функцию обратного вызова. Итак, snapshot.forEach(doc => {...}) should be: snapshot.forEach(async doc => {...})

ошибка: 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 
  }
} 

Примечание: может быть синтаксическая ошибка в коде в приведенном выше коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...