Как я могу заставить событие ждать в обещании, пока оно не запустится? - PullRequest
0 голосов
/ 24 февраля 2020

В процессе отправки аутентификации персонажа в firebase.

поток кода ...

  1. Пользователь вводит номер телефона и нажимает кнопку
  2. Отправьте значение на сервер и отправьте код аутентификации в тексте
  3. Пользователь вводит код аутентификации и нажимает кнопку
  4. распознавание значения кода аутентификации

На втором шаге, нажав кнопку выполнит signIn(), то есть код.

 const signIn = () => {
    auth
      .signInWithPhoneNumber(mobileNum, appVerifier)
      .then(function(confirmationResult) {

        //start

        window.confirmationResult = confirmationResult;

        confirmationResult
          .confirm(authCode)
          .then(function(result) {
            var user = result.user;
          })
          .catch(function(error) {
          });

        //end
      })
      .catch(function(error) {
        console.log(error);
      });
  };

На этом этапе часть от start до end должна быть выполнена после шага 3 (после события кнопки).

* end из start должно ждать события кнопки.

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

Вы должны сместить подтверждение кода авторизации влево в цепочке обещаний, чтобы все было выполнено последовательно, и вы можете выполнить код после выполнения обоих обещаний, например:


    const signIn = () => {
        auth
          .signInWithPhoneNumber(mobileNum, appVerifier)
          .then(function(confirmationResult) {
            window.confirmationResult = confirmationResult;
            return confirmationResult.confirm(authCode);
          })
          .then(function(result) {
            var user = result.user;
            // end here, auth code has been confirmed and you have access to user
          })
          .catch(function(error) {
            // this will catch errors in either "signInWithPhoneNumber" or "confirmationResult.confirm"
            console.log(error);
          });
      };

0 голосов
/ 24 февраля 2020

Вы пытаетесь сделать слишком много без участия пользователя. Обещание signInWithPhoneNumber должно разрешить отображение страницы запроса подтверждения и прекратить работу. Это сделано. На следующем шаге пользователь отправляет номер подтверждения.

Итак, похоже, что

  1. Обработчик событий 1 отправляет номер телефона, а затем разрешает представить экран ввода подтверждения
  2. Обработчик событий 2 отправляет номер подтверждения в функцию аутентификации, затем разрешает обновить пользователя и отображать экран приветствия.

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

0 голосов
/ 24 февраля 2020

переместите следующий код в другую функцию:

confirmationResult
          .confirm(authCode)
          .then(function(result) {
            var user = result.user;
          })
          .catch(function(error) {
          });

и вызовите вышеуказанную функцию внутри onClick шага 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...