web-dev-qa-db-fra.com

Fonctions Cloud pour le style Attendre Async de Firebase

On dirait que Cloud Functions ne prend pas en charge la notation Async-Await. Est-il possible d'utiliser Babel jusqu'à ce qu'ils le fassent ou est-il recommandé d'utiliser des promesses?

Ma fonction actuelle qui se trouve sur Node est comme suit:

exports.getToken = async (req, res) => {
  //1. Generate token from Braintree
  const result = await gateway.clientToken.generate();

  //2. Return the client token
  res.json(result.clientToken);
};
32
Brandon

Cloud Functions exécute la version LTS de node.js, qui selon la documentation est 6.14.0 à ce moment. Le noeud 6.x supporte EcmaScript 6, qui n'inclut pas async/wait .

Cependant, vous pouvez écrire votre code dans TypeScript et le transpiler en ES5/ES6, ce qui convertira l'utilisation de async/wait en promesses. Une recherche sur le Web suggère que peut-être ce plugin peut être utilisé pour aider Babel à effectuer un transpilage similaire.

Il convient de noter que la CLI de Firebase vous permet désormais d'initialiser un nouveau projet Cloud Functions avec support natif de TypeScript , ce que l'équipe de Firebase recommande actuellement aux développeurs.

Si vous ne souhaitez pas utiliser TypeScript, vous pouvez maintenant également choisir le noeud 8 (actuellement en version bêta et prenant en charge async/wait pour le code JavaScript pur) en tant que cible de déploiement. Vous pouvez suivez la documentation pour éditer votre package.json pour indiquer que vos fonctions doivent être déployées sur le noeud 8.

41
Doug Stevenson

Maintenant vous pouvez utiliser Node.js version 8 en ajoutant ceci dans votre functions/package.json:

"engines": {
   "node": "8"
}

Exemple: https://github.com/firebase/functions-samples/blob/Node-8/authenticated-json-api/functions/package.json

33
l2aelba

Au lieu de transpiler TypeScript, j'ai transpilé mon javascript après avoir suivi ceci très joli post et jeter un oeil sur ce référentiel

Fondamentalement, vous pouvez faire:

npm install -g @babel/cli @babel/core @babel/preset-env
  • UPDATE:
    J'ai des problèmes avec la version "7.0.0-beta.51" de Babel. "7.0.0-beta.44" toujours ok.
    Passer à la version stable 6

    npm installer --save-dev babel-cli babel-preset-env

Créez le fichier .babelrc dans votre dossier de projet

{
  "presets": [
    ["@babel/env", {
      "targets": {
        "node": "6.11.5"
      }
    }]
  ]
}

Déplacez votre dossier "functions" vers le dossier "firebaseFunctions" puis exécutez

babel firebaseFunctions --out-dir functions --copy-files --ignore firebaseFunctions/node_modules

Ou exécutez cette commande pour chaque fichier que vous voulez transpiler

babel originalfile.js --out-file transpiledfile.js
6
rma

Dans votre functions/.eslintrc.json Fichier défini comme 'ecmaVersion': 2017 ceci supprimera l'erreur de syntaxe eslint

"parserOptions": {
    "ecmaVersion": 2017
 },

Dans votre functions/package.json jeu de fichiers node version à 8 en ajoutant ci-dessous

"engines": {
     "node": "8"
},

cela mettra à jour la version du nœud de nuage à 8 La version du nœud par défaut est 6

0
NuOne

Les solutions ci-dessus ne fonctionnaient pas pour moi seul. J'ai dû mettre à jour les derniers outils Firebase:

npm update -g firebase-tools

puis mettez à jour mon package.json en ajoutant:

 "engines": {"node": "8"}

et tout a bien fonctionné avec async/wait.

Crédits à ce blog https://howtofirebase.com/cloud-functions-migrating-to-node-8-9640731a8acc

0
Adam