【问题标题】:SyntaxError: Unexpected reserved word, for await loopSyntaxError:意外的保留字,等待循环
【发布时间】:2020-05-24 01:49:34
【问题描述】:

我有这样的功能:

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');
      });
...

但是当我尝试将它部署到 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)

找到了这个:https://github.com/nodejs/node/issues/21617 但我确实将我的 ForLoop 设置为异步函数...

【问题讨论】:

    标签: javascript node.js google-cloud-functions


    【解决方案1】:

    for-await loops are first available in node in version 10。您可能在本地或 package.json 中使用较早的节点版本。

    您需要确保在用于部署的两个本地节点中至少使用节点 10:

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

    并且还可以在 package.json 中定位节点 10,以便可以告诉 Cloud Functions 使用哪个版本进行部署:

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

    【讨论】:

    • 如果不查看所有代码以了解可能受到的影响,就不可能知道。试试看它是否有效。我怀疑你不太可能有问题。
    • 是的,这是一个懒惰的问题,我升级没有问题,谢谢
    【解决方案2】:

    使用以下命令破解解决方案

    nvm use lists //if nvm is installed it is useful to check versions of node
    
    node -v // to check which version is getting used
    

    如果节点的版本低于 10.x.x,我们可以使用以下命令指向其他高于 10.x.x 的节点:

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

    注意:安装nvm方便切换node版本

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 2021-10-03
      • 2022-06-10
      • 2018-08-04
      • 2021-11-05
      • 2023-03-12
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多