I have a function like this:
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 when I try to deploy it to firebase functions I got the following error:
! 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)
Found this: https://github.com/nodejs/node/issues/21617 but I did set my ForLoop in an async function…
Advertisement
Answer
for-await loops are first available in node in version 10. You’re probably using an earlier node version either locally or in package.json.
You will need to make sure that you are using at least node 10 in both your local node that you use for deployment:
$ node --version ...should print 10.x.x or later
and also target node 10 in your package.json so Cloud Functions can be told which version to use for deployment:
"engines": { "node": "10" }