как ждать вызова aws cognito authenticateUser (который выглядит как обратный вызов) - PullRequest
0 голосов
/ 01 мая 2018

Итак, мы используем вызовы await / async, но команда authenticateUser, предоставляемая aws-ampify, похоже, использует обратный вызов. Я программист на Python и давно не кодировал ноды, так что это может быть наивным вопросом!

Я пытался преобразовать его в обещание так:

function authenticateUserAsync(user, authDetails) {
    return new Promise(function(resolve, reject, challenge) {
          user.authenticateUser(authDetails, { 
                          onSuccess: resolve,
                          onFailure: reject, 
                          newPasswordRequired: challenge });

    }).then(
        function(result) { 
           return result; 
        });
}

и позже

 idToken = await authenticateUserAsync(user, authDetails,
    function(result) {
        console.log("Token: ");
        console.log(result.idToken);
        return result.idToken;
    },
    function(err) {
        console.log(err);
        this.setState({idToken: ''});
        if (err.code == 'NotAuthorizedException') {
                return 'not_authorized';
        } else {
                return 'unknown_error';
        }

    },
    function(userAttrs, reqAttrs) {
        return 'challenge';
    } 
  );

Но, независимо от того, как я его подправил, код течет сразу, а затем я получаю необработанное отклонение обещания (в моем тесте аутентификация не проходит в данный момент)

1 Ответ

0 голосов
/ 01 мая 2018

вот правильный способ использования asyc / await, вы не можете использовать только ключевое слово await, оно должно быть внутри функции с ключевым словом async в сигнатуре функции

const fetchData = async () => {
  try{
  const res = await fetch('https://jsonplaceholder.typicode.com/posts/1')
  const data = await res.json()
   console.log(data)
  }catch(err){
     console.log('error from fetch : ',err)
  }
}

fetchData()

я думаю, что в вашем примере вы можете сделать что-то вроде этого

const getIdToken = async () => {
  try{
  idToken = await authenticateUserAsync(user, authDetails,
    function(result) {
        console.log("Token: ");
        console.log(result.idToken);
        return result.idToken;
    },
    function(err) {
        console.log(err);
        this.setState({idToken: ''});
        if (err.code == 'NotAuthorizedException') {
                return 'not_authorized';
        } else {
                return 'unknown_error';
        }

    },
    function(userAttrs, reqAttrs) {
        return 'challenge';
    } 
  );
  return idToken;
  }catch(err){
     console.log('error from fetch : ',err)
  }
}
...