Ожидаемый catch () или возврат (обещание / catch-or-return)

1

Я новичок в 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;
      });
    }
  });
});
  • 0
    Это не ошибки, это предупреждения от линтера.
  • 0
    Вы можете найти объяснения правил на eslint.org/docs/rules
Теги:
firebase
google-cloud-functions
eslint

1 ответ

2
Лучший ответ

Первая ошибка предполагает использование функции стрелки в качестве обратного вызова. Поэтому вам нужно заменить обычные функции, (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 в свое обещание.

  • 0
    Вы можете добавить, что return обещания здесь не подходит.
  • 0
    @ Берги - боюсь, я не знаком с функциями, используемыми здесь. Вот почему выложили дипломатический ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню