web-dev-qa-db-fra.com

Erreur ESLint lors de la tentative de déploiement des fonctions Firebase

J'essaie de déployer un exemple fireabase, mais lorsque j'essaie de le déployer, CLI lance une erreur:

[CODE]

const functions = require('firebase-functions'); //to activate firebase functions

const admin = require('firebase-admin'); //to active firebase database permissions

admin.initializeApp(functions.config().firebase);

exports.addMessage = functions.https.onRequest((req, res) => {
// [END addMessageTrigger]
  // Grab the text parameter.
  const original = req.query.text;
  // [START adminSdkPush]
  // Push the new message into the Realtime Database using the Firebase Admin SDK.
  admin.database().ref('/messages').Push({original: original}).then(snapshot => {
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
    res.redirect(303, snapshot.ref);
  });
  // [END adminSdkPush]
});

[ERREUR]

  15:3   error  Expected catch() or return                  promise/catch-or-return
  15:69  error  Each then() should return a value or throw  promise/always-return

✖ 2 problems (2 errors, 0 warnings)


npm ERR! Darwin 17.4.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "--prefix" "/Users/user/test/functions" "run" "lint"
npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! functions@ lint: `eslint .`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the functions@ lint script 'eslint .'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the functions package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     eslint .
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs functions
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls functions
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/eliassebastian/Developer/npm-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code1

Je jette un oeil à la version originale fournie par firebase ici

Je suis novice en Javascript et dans tout ce monde, alors je suis vraiment perdue avec ce type de messages.

Comment puis-je résoudre ça?

5
Shudy

Les avertissements ESLint sont légitimes. Pour obtenir plus de détails sur chacun, vous pouvez les rechercher en utilisant leur identifiant unique. Par exemple:

15:3   error  Expected catch() or return                  promise/catch-or-return

L'identifiant de l'avertissement ici est promise/catch-or-return. Googler pour "eslint promise/catch-or-return" trouve un plugin pour ESLint qui décrit l'avertissement comme suit:

Applique l'utilisation de catch () sur les promesses non retournées

Vous recevez ceci parce que vous avez une promesse d'être retournée de then, mais que vous n'avez jamais return ou catch pour des erreurs possibles.

Le deuxième avertissement:

15:69  error  Each then() should return a value or throw  promise/always-return

provient du même plugin ESLint, et est décrit comme suit:

Revenez à l'intérieur de then puis () pour créer des chaînes de promesse lisibles et réutilisables.

Cela vous oblige à renvoyer une valeur dans chaque fonction appelée par then, même si vous n'avez rien de spécial à envoyer à la chaîne de promesse suivante.

Vous pouvez résoudre ces deux problèmes comme ceci:

admin.database().ref('/messages').Push({original: original}).then(snapshot => {
    res.redirect(303, snapshot.ref);
    return null;
}).catch(error => {
    console.error(error);
    res.error(500);
});

Notez que le bloc then renvoie null maintenant et que catch est utilisé sur la promesse renvoyée par then pour capturer les erreurs et envoyer une réponse d'erreur au client.

17
Doug Stevenson

Doug Stevenson répond partiellement, car il comporte un défaut.

CA devrait etre :

admin.database().ref('/messages').Push({original: original}).then(snapshot => {
    res.redirect(303, snapshot.ref);
    return 1; // IT SHOULD RETURN NON-NULL VALUE
}).catch(error => {
    console.error(error);
    res.error(500);
});

 cloud functions issue resolved

La fonction cloud est entrée dans la boucle infinite lorsqu'elle a renvoyé null. Et par conséquent, nous pouvons voir la fonction expirée après 60 000 ms dans l'image ci-dessus. 

 functions not executed

Après de telles fonctions, vous obtiendrez l’erreur les fonctions peuvent être exécutées (voir la photo ci-dessus). En effet, dans Spark Plan (plan de niveau gratuit), il existe une limite sur CPUMilliSecondsDailyNonbillable.

 GCD quota area Si vous cliquez sur Stratégie de quota de Stackdriver dans la section Fonctions cloud, vous pouvez voir la limite dans GCD (Google Cloud Platform).

0
Ayush Gupta