vue-router проталкивает маршрут после почтового запроса axios

Когда я написал следующий код:

axios.post('/user', { email: this.email })
.then(
    (response) => {
      if (!response.data) {
        this.$router.push({ path: '/register', params: { user: defaultUser } });
      } else {
        this.$router.push({ path: '/login', params: { user: response.data } });
      }
    }, 
    (error) => {
      console.log(error);
    }
);

Компилятор показывает ошибку @typescript-eslint/no-floating-promises: Promises must be handled appropriately or explicitly marked as ignored with the void operator.

Я также пытался поставить блок catch после блока, но проблема все та же.

axios.post('/user', { email: this.email })
  .then((response) => {
    if (!response.data) {
      this.$router.push({ path: '/register', params: { user: defaultUser } });
    } else {
      this.$router.push({ path: '/login', params: { user: response.data } });
    }
  })
  .catch((error) => {
    console.log(error);
  });

Я также понял, что проблема исчезает, когда я закомментирую this.$router.push. Таким образом, проблема может быть связана с перенаправлением маршрута и разрешением обещания. Может быть, лучше перефразировать проблему на «как перенаправить маршрут, не оставляя невыполненного обещания»? Надеюсь, я ясно изложил вопрос.


person ckouder    schedule 10.08.2020    source источник
comment
это должно помочь может ли это быть связано с обещаниями ошибок tslint, которые должны быть обработаны соответствующим образом"> stackoverflow.com/questions/43980188/   -  person Jonathan Akwetey Okine    schedule 10.08.2020
comment
@JonathanAkweteyOkine Я проверил пост, но не думаю, что он решил мою проблему. Я обновил вопрос и, надеюсь, прояснил.   -  person ckouder    schedule 11.08.2020
comment
Является ли фигурная скобка внизу вашего фрагмента внешней функцией?   -  person Daniel_Knights    schedule 11.08.2020
comment
@Daniel_Knights Да, это из внешней функции. Я внес изменения и просто удалил его.   -  person ckouder    schedule 11.08.2020


Ответы (1)


ОК, наконец, я понял это. this.$router.push() возвращает обещание, с которым я плохо справился. Окончательное решение работает следующим образом:

axios.post('/user', { email: this.email })
  .then((response) => {
    if (!response.data) {
      void this.$router.push({ path: '/register', params: { user: defaultUser } });
    } else {
      void this.$router.push({ path: '/login', params: { user: response.data } });
    }
  })
  .catch((error) => {
    console.log(error);
  });

Поскольку наличие void вызовет синтаксическую ошибку eslint no-void, и меня не волнует возвращаемое значение этого обещания, я подавил предупреждение, добавив /* eslint-disable no-void */.

person ckouder    schedule 23.08.2020