web-dev-qa-db-ja.com

関数FirebaseをデプロイしようとするESLintエラー

Fireabaseの例をデプロイしようとしていますが、デプロイしようとすると、CLIがエラーを起動します。

[コード]

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

[エラー]

  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

Firebaseが提供する元のファイナルを確認します here

私はJavascriptとこの世界のすべてに慣れていないので、このタイプのメッセージには本当に迷っています。

どうすれば解決できますか?

7
Shudy

ESLintの警告は正当なものです。それぞれの詳細を取得するには、一意のIDを使用して検索できます。例えば:

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

ここでの警告のIDはpromise/catch-or-return。 「eslint promise/catch-or-return」のグーグル検索は、警告を次のように記述する ESLintのプラグイン を見つけます。

返されない約束に対してcatch()の使用を強制します

thenからpromiseが返されるため、これを取得していますが、エラーの可能性のためにreturnまたはcatchを使用することはありません。

2番目の警告:

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

同じESLintプラグインから来て、このように記述されています:

各then()内に戻り、読み取り可能および再利用可能なPromiseチェーンを作成します。

次のプロミスチェーンに送信する特別なものがない場合でも、thenによって呼び出される各関数内で値を返す必要があります。

次のように、これらの問題の両方を解決できます。

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

thenブロックは現在nullを返し、catchthenから返されたプロミスで使用され、エラーをキャプチャし、クライアントにエラー応答を送信します。

23
Doug Stevenson

Doug Stevenson 1つの欠陥があるため、答えは部分的に正しいです。

そのはず :

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

クラウド関数はnullを返したときの無限ループに入りました。その結果、上の画像では60,000ミリ秒後に機能がタイムアウトしたことがわかります。

functions not executed

このような複数のタイムアウトした関数の後、エラーが表示されます関数を実行できます(上の写真に表示)。これは、Spark Plan(無料利用枠プラン)では、CPUMilliSecondsDailyNonbillableに制限があるためです。

GCD quota area クラウド機能セクションで Stackdriverのクォータポリシー をクリックすると、GCD(Google Cloud Platform)で制限を確認できます

0
Ayush Gupta