Возврат или пропуск из catch в асинхронной функции - PullRequest
0 голосов
/ 19 января 2019

У меня есть асинхронная функция, вывод которой (разрешение / отклонение) я преобразую с помощью then / catch.

Я хочу завершить внешнюю функцию возвратом, но я могу как-то только вернуться в catch.

Как я могу пропустить / выйти / вернуться на улицу поймать или ждать?

await this.authService.auth(this.oldUser).then( resolve => {

  //went in authService and resolve can be used

}).catch( reject => {

  //in catch as authService rejected and want to return to outer 
  //function

  return;
})

//Second attempt should only be done if first attempt "resolved"
await this.authService.auth(this.newUser).then( resolve => {

}).catch( reject => {

  return;
})

Ответы [ 2 ]

0 голосов
/ 19 января 2019
private async authenticate(oldUser: User) {
    try {
        await this.authService.auth(this.oldUser).toPromise();            
        return;
    } catch (reject) {
        return;
    }
}
0 голосов
/ 19 января 2019

Вы можете сделать так, чтобы .then и .catch возвращали что-то значимое, что отличает их, а затем проверяли этот отличительный фактор. Например:

const result = await this.authService.auth(this.oldUser).then((authorizedUser) => {
  // do stuff with authorizedUser
  return authorizedUser;
}).catch((err) => {
  // handle errors, if needed
  return { err };
});

if (result.err) {
  // there was en error, return early:
  return;
}
// rest of the code that depends on the first request being successful goes here
await this.authService.auth(this.newUser).then(...)

Обратите внимание, что если вы используете await, возможно, имеет смысл использовать try/catch вместо .then s и await s:

try {
  const authorizedUser = await this.authService.auth(this.oldUser)
  // do stuff with authorizedUser
  // rest of the code that depends on the first request being successful goes here
  const newAuthorizedUser = await this.authService.auth(this.newUser);
  // do stuff with newAuthorizedUser
} catch(err) {
    // handle errors, if needed
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...