无法将异步功能部署到Google Cloud Functions

时间:2017-11-13 00:26:37

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

我使用的是最新版本的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上的服务器上没有出现此错误。

3 个答案:

答案 0 :(得分:4)

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

该团队正在研究提供Node 8 LTS。

答案 1 :(得分:0)

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

当我键入" node --version"在我的Google云端控制台中,它显示8.5.0作为节点版本。

但是当我通过" gcloud beta功能部署"来部署脚本时,我得到一个"语法错误:意外的标识符"在我的脚本的位置,第一个"等待"使用。

Google Cloud中是否禁用了异步/等待?

答案 2 :(得分:0)

通过Google Cloud Platform部署异步功能时出现此错误。即使我在本地运行较新的NodeJS版本,也已将其部署为v6。您可以将功能部署为NodeJS v6或v8。截至2019年1月,v6是默认选择,需要在部署前选择v8(测试版)。