ТОГДА оператор, возвращающийся с ошибками обещания / всегда возврата и последовательного возврата - PullRequest
0 голосов
/ 19 февраля 2019

Это код облачной функции Google, которую я пытаюсь развернуть.Я получаю сообщение об ошибке, говорящее, что мой .then () обещает или противоречит.Кто-нибудь знает, что я делаю не так?

const admin = require('firebase-admin');
const twilio = require('./twilio');

module.exports = function(req, res) {
  if (!req.body.phone) {
    return res
      .status(422)
      .send({ error: 'You must provide a phone number' });
  }

  const phone = String(req.body.phone).replace(/[^\d]/g, '');

  admin
    .auth()
    .getUser(phone)
    .then(userRecord => {
      const code = Math.floor((Math.random() * 8999 + 1000));

      const message = {
        body: 'Your code is ' + code,
        to: phone,
        from: '+18053167032'
      };

      const callback = (err) => {
        if (err) {
          return res.status(422).send(err);
        }

        admin
          .database()
          .ref('users/' + phone)
          .update(
            { code: code, codeValid: true },
            () => { res.send({ success: true }
          );
      };

      twilio.messages.create(message, callback);
    })
    .catch((err) => {
      res.status(422).send({ error: err });
    });
}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вдобавок ко мне, ваши блоки отступов трудно точно использовать фигурные скобки, и в ответ на упоминание @ hanoldaa о функциях стрелок, очень важно иметь возможность точно отслеживать, где будет функция userRecord =>конец.Если в нем говорится, что ваши обещания .then противоречивы, то я бы предположил, что вы либо вызываете .then для объектов, не являющихся обещаниями, либо не обрабатываете неразрешенные обещания.

Javascript.info предлагает отличное предложение для глобальногообработка нерешенных обещаний, используя:

window.addEventListener('unhandledrejection', function(event) {
  // the event object has two special properties:
  alert(event.promise); // [object Promise] - the promise that generated the error
  alert(event.reason); // Error: Whoops! - the unhandled error object
});

new Promise(function() {
  throw new Error("Whoops!");
}); // no catch to handle the error

Надеюсь, это поможет!

0 голосов
/ 19 февраля 2019

В конце вы делаете

.catch((err) => {
  res.status(422).send({ error: err });
});

, но err не должно быть заключено в круглые скобки.Используйте

.catch(err => {
  res.status(422).send({ error: err });
});
...