预期的catch()或返回(promise / catch-or-return)

时间:2018-04-28 14:37:18

标签: javascript firebase google-cloud-functions eslint

我是JavaScript新手。这是我在javascript中第一个在firebase上部署函数的函数。

出现此错误:

 - [eslint] Unexpected function expression. (prefer-arrow-callback)
 - [eslint] Expected catch() or return (promise/catch-or-return)

这个功能出了什么问题?

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.grantSignupReward = functions.database.ref('/users/{uid}/last_signin_at')
  .onCreate(event => {
  var uid = event.params.uid;

  admin.database().ref('users/${uid}/referred_by')
    .once('value').then(function(data) {
    var referred_by_somebody = data.val();

    if (referred_by_somebody) {
      var moneyRef = admin.database()
      .ref('/users/${uid}/inventory/pieces_of_eight');

      moneyRef.transaction(function(current_value) {
        return (current_value || 0) + 50;
      });
    }
  });
});

2 个答案:

答案 0 :(得分:6)

第一个错误建议您使用箭头函数作为回调。因此,您需要使用箭头函数(function() { ... })替换常规函数(() => { ... })

第二个错误表明您需要捕获承诺拒绝,或者返回承诺本身。我对你的代码不太确定,但我相信这个方法:

admin.database().ref('users/${uid}/referred_by').once('value')

返回一个承诺。所以它需要像这样返回:

return admin.database().ref('users/${uid}/referred_by').once('value')

或处理如下错误:

admin.database().ref('users/${uid}/referred_by').once('value')
  // ... your code here
  .catch(error => { ... });

正如@Bergi在评论中指出的那样,返回承诺在这里不可取,你可以在你的承诺中添加catch块。

答案 1 :(得分:1)

为了解决promise/catch-or-return,只需在行末添加.catch(() => null)。当然,不要忘记在不久的将来实际实现错误处理逻辑。