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

    0xD34F
    @0xD34F Куратор тега Vue.js
    await setTimeout

    Бессмысленная операция, setTimeout не возвращает Promise, эвейтить тут нечего.

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

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

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

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

    после того, как catch отработает, вызов getUserCheckList завершается, и created продолжает работу, никакого "не позволить продвинуться" не будет (ну и конечно нелишним будет отметить, что хуки жизненного цикла vue синхронны, так что в любом случае не выйдет "приостановить" выполнение created - в том смысле, чтобы асинхронный код выполнился до начала монтирования экземпляра компонента).

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

    data: () => ({
      status: 'unknown',
      val: 'empty',
    }),
    methods: {
      getVal() {
        this.status = 'awaiting request answer';
        return new Promise((...r) => {
          setTimeout(() => {
            const max = 10000;
            this.val = Math.random() * max | 0;
            r[+(this.val < max * 0.9)]();
          }, 1000);
        }).catch(this.handleError);
      },
      handleError() {
        this.status = 'ERROR, awaiting new request';
        return new Promise(r => setTimeout(r, 2000)).then(this.getVal);
      },
    },
    async created() {
      await this.getVal();
      this.status = 'OK';
    },

    <div>status: {{ status }}</div>
    <div>value: {{ val }}</div>
    Ответ написан
    Комментировать