【问题标题】:Can not deploy async function to Google Cloud Functions无法将异步功能部署到 Google Cloud Functions
【发布时间】:2017-11-13 00:26:37
【问题描述】:

我使用的是最新版本的 Node,v8.9.1,但在部署以下代码时出现此错误:

Function load error: Code in file index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/index.js:550
  async function deleteQueryBatch(db, query, batchSize, results) {
        ^^^^^^^^

SyntaxError: Unexpected token function

代码(需要虚拟函数来获取错误):

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore()

exports.some = functions.firestore.document('x/{x}').onCreate(event => {

})

function deleteCollectionAndReturnDeletedDocs(db, collectionRef, batchSize) {
    return deleteQueryBatch(db, collectionRef.limit(batchSize), batchSize, []);
  }
  async function deleteQueryBatch(db, query, batchSize, results) {
    const snapshot = await query.get();
    if (snapshot.size > 0) {
      let batch = db.batch();
      snapshot.docs.forEach(doc => {
        if (doc.exists) {
          results.push(doc.data())

        };
        batch.delete(doc.ref);
      });
      await batch.commit();
    }
    if (snapshot.size >= batchSize) {
      return deleteQueryBatch(db, query, batchSize, results);
    } else {

      return results;
    }
  }

如何部署异步功能?我在 Evennode 上的服务器上没有收到此错误。

【问题讨论】:

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


    【解决方案1】:

    Cloud Functions currently runs Node 6 LTS,这意味着它本身不支持 async/await。如果您想使用某种形式的 async/await,您必须将 ES7 或 TypeScript 转换为 ES6,以便它可以在 Cloud Functions 提供的 Node 容器中运行。转译器应使用 Promise 将 async/await 转换为等效代码。

    团队正在考虑提供 Node 8 LTS。

    【讨论】:

      【解决方案2】:

      由于 NodeJS 8.x 现在是 LTS,它应该可以工作,对吧?

      当我在我的 Google Cloud 控制台中键入“node --version”时,它会显示 8.5.0 作为节点的版本。

      但是当我通过“gcloud beta functions deploy”部署脚本时,我在脚本中使用第一个“await”的位置收到“SyntaxError: Unexpected identifier”。

      那么在 Google Cloud 中是否禁用了 async/await?

      【讨论】:

      • 不,您看到的是您自己的本地节点版本,而不是谷歌版本。看Doug的链接,还是6.x。
      • 啊...当我在 cloud.google.com 上并且那里(在网站上!)进入云控制台时,这在技术上不可能访问我的本地控制台/节点安装并给我我的本地节点版本。此外,我的本地节点版本是 8.9.1,而不是云控制台中打印的 8.5.0。所以 8.5.0 版本肯定来自谷歌云。
      【解决方案3】:

      我在通过 Google Cloud Platform 部署异步函数时遇到此错误。即使我在本地运行较新的 NodeJS 版本,我还是部署为 v6。您可以将函数部署为 NodeJS v6 或 v8。自 2019 年 1 月起,v6 为默认选择,需要在部署前选择 v8(Beta)。

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 2019-10-06
        • 2017-09-01
        • 1970-01-01
        • 2020-11-03
        相关资源
        最近更新 更多