webentwicklung-frage-antwort-db.com.de

ESLint-Fehler beim Bereitstellen von Funktionen Firebase

Ich versuche, ein Fireabase-Beispiel bereitzustellen, aber wenn ich versuche, es bereitzustellen, gibt die CLI einen Fehler aus:

[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]
});

[ERROR]

  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! [email protected] lint: `eslint .`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] 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

Ich schaue auf das Original von Firebase here

Ich bin zu neu in Javascript und dieser ganzen Welt, also bin ich mit dieser Art von Nachrichten wirklich verloren.

Wie kann ich das lösen?

5
Shudy

Die ESLint-Warnungen sind legitim. Um weitere Informationen zu erhalten, können Sie sie anhand ihrer eindeutigen ID durchsuchen. Zum Beispiel:

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

Die ID der Warnung lautet hier promise/catch-or-return. Googeln für "eslint versprechen/catch-or-return" findet ein Plugin für ESLint das die Warnung als beschreibt:

Erzwingt die Verwendung von catch () für nicht zurückgegebene Zusagen

Sie erhalten dies, weil Sie ein Versprechen von then zurückgegeben haben, aber niemals return oder catch für mögliche Fehler.

Die zweite Warnung:

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

kommt vom selben ESLint-Plugin und wird wie folgt beschrieben:

Kehren Sie in jedem then () zurück, um lesbare und wiederverwendbare Promise-Ketten zu erstellen.

Es ist erforderlich, dass Sie in jeder von then aufgerufenen Funktion einen Wert zurückgeben, auch wenn Sie nichts Besonderes an die nächste Versprechungskette senden müssen.

Sie können beide Probleme wie folgt beheben:

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

Beachten Sie, dass der then-Block jetzt null zurückgibt und catch für das von then zurückgegebene Versprechen verwendet wird, um Fehler zu erfassen und eine Fehlerantwort an den Client zu senden.

17
Doug Stevenson

Doug Stevenson Die Antwort ist teilweise richtig, da ein Fehler vorliegt.

Es sollte sein :

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

Die Cloud-Funktion ging in die Schleife infinite, als sie null zurückgab. Als Ergebnis sehen wir, dass die Funktion nach 60.000 ms im obigen Bild abgelaufen ist. 

 functions not executed

Nach solchen mehrfachen Zeitüberschreitungsfunktionen erhalten Sie den Fehler Funktionen können ausgeführt werden (siehe obiges Bild). Dies liegt daran, dass im Spark-Plan (Free Tier Plan) CPUMilliSecondsDailyNonbillable begrenzt ist.

 GCD quota area Wenn Sie in den Cloud-Funktionen auf Stackdriver's Quota Policy klicken, können Sie den Grenzwert in GCD (Google Cloud Platform) sehen

0
Ayush Gupta