How to fix “SyntaxError: Unexpected reserved word” for await loop

In programming, syntax is considered as a tool to determine whether the combined sequence is in the correct order or not. And from that string, is it possible to build a complete structure for the application being designed? Syntax is like a language bridge between programmers and computers.

If in the process you get a SyntaxError: Unexpected reserved word, for await loop like below, and have tried many ways but it doesn’t work, please refer to our solution!

SyntaxError “Unexpected reserved word, for await loop”

If you have a function that needs to be implemented for firebase functions like below:

exports.deleteUser = functions.https.onCall(async(data, context) => {
    let id = context.auth.uid;
    console.log('Delete user: ' + id);

    //delete from algolia
    usersIndex.deleteObject(id);
    console.log(id + 'Deleted from algolia');

    //delete user following
    await admin.firestore().collection('users').doc(id).collection('Following').get()
      .then(async(snapshot) => {
        for await (const document of snapshot.docs) {
          await admin.firestore().collection('users').doc(document.documentId)
            .update({
              'NumberOfFollowers': FieldValue.increment(-1)
            });
          await admin.firestore().collection('users').doc(document.documentId).collection('Followers')
            .doc(id).delete();
        }
        return console.log('Following of ' + id + ' deleted');
      });
...
but you got this error while you have installed ForLoop in an async function:
!  functions[deleteUser(us-central1)]: Deployment error.
Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /srv/index.js:47
            for await (const document of snapshot.docs) {
                ^^^^^

SyntaxError: Unexpected reserved word
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at getUserFunction (/worker/worker.js:439:24)

and here is our solution.

Solution

Most likely, in this case you are using an old node version in package.json or locally. To be able to work properly, you need to make sure both your local node that you use for deployment use at least node 10.

For example: 

$ node --version
...should print 10.x.x or later

and pay attention to node 10 in your package.json to know which version to use for deployment by Cloud Functions

  "engines": {
    "node": "10"
  }

Conclusion

Through this tutorial, you learned how to identify errors SyntaxError: Unexpected reserved word, for await loop  and how to fix them. Don’t panic if you encounter it, calmly find out the cause and solve it, it will help you gain more understanding in web programming.


Related articles
Scroll to Top