尝试部署Firebase函数时出现ESLint错误

时间:2018-02-02 12:02:59

标签: javascript firebase google-cloud-functions eslint firebase-cli

我尝试部署fireabase示例,但是当我尝试部署它时,CLI会启动错误:

[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! 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和整个世界的新人,所以我真的迷失了这类消息。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:20)

ESLint警告是合法的。要获得每个详细信息,您可以使用其唯一ID进行搜索。例如:

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

此处警告的ID为promise/catch-or-return。谷歌搜索“eslint promise / catch-or-return”查找描述警告的a plugin for ESLint

  

强制在未归还的承诺上使用catch()

您收到此消息是因为您已从then返回承诺,但您永远不会returncatch出现错误。

第二个警告:

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

来自同一个ESLint插件,如下所示:

  

返回每个then()以创建可读和可重用的Promise链。

它要求你在then调用的每个函数中返回一个值,即使你没有任何特殊的值发送到下一个promise链。

您可以像这样解决这两个问题:

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,catch用于从then返回的promise以捕获错误并向客户端发送错误响应。

答案 1 :(得分:0)

道格·史蒂文森的回答部分正确,因为其中存在一个缺陷。

应该是:

manWrkbk

cloud functions issue resolved

当云函数返回空值时,它进入了无限循环。结果,我们在上图中看到函数在60,000 ms之后超时。

functions not executed

在执行了多个这样的超时功能后,您将收到错误可以执行的功能(如上图所示)。这是因为在Spark计划(免费套餐)中, CPUMilliSecondsDailyNonbillable 受到限制。

GCD quota area 如果单击“云功能”部分的Stackdriver's Quota Policy,则可以在GCD(Google Cloud Platform)中看到限制