Не доходя до части асинхронного водопада - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь использовать асинхронный водопад в первый раз и столкнулся с проблемой, когда у меня есть функция, которая не была достигнута, и это время ожидания запроса.

Я включил весь код для контроллера, который я пытаюсь создать / использовать.Я поместил файл console.log там, где, кажется, я не могу достичь.

Пока остальная часть кода выполняется, по-видимому, без ошибок.Я сделал console.log много раз, и все в порядке.Я также проверил базу данных, и это правильный результат.Единственная проблема - отправка части электронной почты, но это не должно быть проблемой, поскольку я использую ту же функцию отправки электронной почты в том же файле, и она работает.Я использую его как раз перед этим, чтобы отправить электронное письмо, содержащее токен сброса.

exports.tokenPost = function(req, res, next) {

  let password = req.body.password;
  let password_confirm = req.body.password_confirm;

  if(password != password_confirm) return res.status(400).json({message: 'Error passwords don\'t match. Please make sure they match'});

  async.waterfall([
    function(done) {
      User
        .findOne({ resetPasswordToken: req.params.token })
        .where('resetPasswordExpires').gt(Date.now())
        .exec(function(err, user) {
          if(err){
            console.log(err);
          }
          if (!user) {
            return res.status(400).json({success: false, message: 'We can\'t find a user with that reset token. Please try resetting your password again or contact customer support.'});
          }

          user.password = password;
          // user.resetPasswordToken = undefined;
          // user.resetPasswordExpires = undefined;

          user.save(function(err) {
            if (err) console.log(err);
            if (err) return next(err);
          });
        });
    },
    function(user, done) {
      console.log('This code is not being run);
      let message = 'Hello,\n\n' + 'this is a confirmation that the password for your account ' + user.email + ' has just been changed.\n';
      sendEmail(`"Company Name" ${config.noreply}`, req.body.email, 'Password changed', message);
      res.status(200).json({success: true, message: 'Success your password has been changed.'});
    }
  ], function(err) {
    console.log(err);
    if (err) return next(err);

  });
};

Я ожидаю, что письмо будет отправлено, а затем будет запущено res.status.json, дающее мне ответ, который я ищу.

1 Ответ

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

Выяснили, что было не так, при использовании асинхронного водопада, и вы добавили done в качестве параметра для функции, которую вы должны сделать, чтобы вызвать следующую функцию.Я не звонил, когда закончил, сохраняя фиксированного пользователя.

Также забыл часть электронной почты, где мне нужно было позвонить user.email по сравнению с req.body.email, так как у меня нет электронной почты в качестве поля в моей форме.

...