简体   繁体   English

SyntaxError:意外的保留字,等待循环

[英]SyntaxError: Unexpected reserved word, for await loop

I have a function like this:我有一个像这样的 function:

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:但是当我尝试将其部署到 firebase 函数时,出现以下错误:

!  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...找到了这个: https://github.com/nodejs/node/issues/21617但我确实将我的 ForLoop 设置为异步 function ...

for-await loops are first available in node in version 10 . for-await 循环首先在 node 版本 10 中可用 You're probably using an earlier node version either locally or in package.json.您可能在本地或 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:您需要确保在用于部署的两个本地节点中至少使用节点 10:

$ 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:并且还以 package.json 中的节点 10 为目标,因此可以告诉 Cloud Functions 使用哪个版本进行部署:

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

Use below commands to crack the solution使用以下命令破解解决方案

nvm use lists //if nvm is installed it is useful to check versions of node

node -v // to check which version is getting used

If version of node is below 10.xx than with the help of nvm we can point to other above 10.xx using below command:如果节点版本低于 10.xx,而不是在 nvm 的帮助下,我们可以使用以下命令指向 10.xx 以上的其他节点:

nvm use 12.19.0 //in my case, I have option for latest one as it was installed using nvm install 12.19.0

Note: Install nvm for easy switching of node versions注意:安装nvm,方便切换node版本

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM