Почему строки кода после await не вызывают? - PullRequest
0 голосов
/ 10 марта 2020

У меня проблема со следующим кодом. Firebase.login возвращает Обещание, и я узнал, что когда я ставлю «ожидание» раньше, Javascript ждет, пока Обещание не выполнит поставку, и затем продолжает со следующей строки. I

Но следующая строка (и) кажется, никогда не сработает. Что я делаю неправильно? Он также не останавливается на отметке «отладчик».

    try {
      const user = await firebase.login(email, password);
      console.log("l1: ", user);
      debugger;
      props.history.replace("/impressum");
    } catch (error) {
      alert(error.message);
    }
  }```

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Решение:

Я получил решение от моего нового героя:

"Кнопки отправки отправляют формы.

Когда форма отправлена, браузер переходит к новой web page.

Поскольку страница, на которой работала программа JS, была удалена, программа JS закрывается. Это происходит до достижения console.log ("l2"); "

Итак, все, что мне нужно было сделать, это вставить "event.preventDefault". В учебном пособии используется простая кнопка, которая не вызывает отправку формы. Я использовал bootstrap кнопку отправки и поэтому я думаю, что форма всегда была отправлена.

0 голосов
/ 10 марта 2020

Возвращенный Promise из вызова firebase.login(); должен быть заключен в функцию async (которую мы не можем увидеть из вашего фрагмента). Как уже упоминалось в комментариях, возможно, что catch срабатывает, и в этом случае вы должны изящно обработать ошибку.

// mock the firebase login Promise
const firebase = {
  async login(email, password) {
    return {
      email
    };
  }
};

(async() => {
  try {
    const [email, password] = [
      'joe.bloggs@example.com',
      'password123',
    ];
    const user = await firebase.login(email, password);

    console.log(user);
  } catch (err) {
    console.error(err);
  }
})();
...