@Meros

Как не позволить функции продвинуться дальше?

Добрый вечер. Я новичок в js, Я не буду выкладывать компонент полностью, поскольку в нем почти 500 строчек, и разбираться в нем вам будет просто больно.
async created(){
  await this.getUserCheckList();
  ....последующие функции и обработка данных.
}
methods:{
  async getUsersCheckList(){
    await axios.get(this.userListUrl).then((x)=>{this.usernameSlugList = x.data.slug; this.emailSlugList = 
    x.data.email_slug}).catch((e)=>{this.handleUsersListErrors(e)});
  },
  async handleUsersListErrors(e){
    if (!e.status){
      await setTimeout(()=> this.getUsersCheckList(), 10000);
     }
  },
}


Задумка заключается в следующем: если не удалось подключиться к серверу, то через async handleUsersListErrors происходит вызов запрашиваемой функции до тех пор, пока сервер не начнет отвечать. И до тех пор, пока это не произойдет, async created() не должна двигаться дальше await this.getUserCheckList(). У меня же получается так, что после первого вызова handleUserListErrors процессы в created двигаются дальше, и это вызывает тонну ошибок, которые бы я хотел избежать. Собственно, вопрос: как мне организовать код, чтобы в async created() не двигалась дальше, пока this.getUserCheckList не получит данные?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
await setTimeout

Откуда вы взяли, что setTimeout можно эвейтить? Не надо подменять чтение документации своими фантазиями.

Если хотите использовать await вместе с setTimeout, последний придётся явно завернуть в Promise:

await new Promise(r => setTimeout(r, 1000))

Кроме того, надо возвращать результаты выполнения функций, например здесь

.catch((e)=>{this.handleUsersListErrors(e)})

после того, как catch отработает, вызов getUserCheckList завершается, и created продолжает работу, никакого "не позволить продвинуться" не будет.

UPD. Держите пример того, как может выглядеть реализация подобной схемы (в роли "запроса" выступает генерация случайного числа, успешным результатом считается число, попадающее в верхние 10% заданного интервала).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 авг. 2019, в 14:20
15000 руб./за проект
21 авг. 2019, в 13:40
25000 руб./за проект