Vue возвращается из обещания - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь вернуть некоторое значение из этой отправки

 this.$store.dispatch('setValue', this.Value)
      .then(response => {
        console.log(response)
});

В моем действии vuex у меня есть

.catch(error => {
              if (error.response.status === 412) {
                return "some message"
     }
});

Как передать ошибку обратно в файл .vue, гдеотправка vuex?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Я думаю, что правильный способ сделать это - иметь свойство status в вашем store.

Ваш объект статуса будет состоять из error, success, loading.

Так что, если ваше исключение выдает действие, вы можете обработать его следующим образом:

catch (error) {
    commit("error", `Some Message`);
}

Ваша мутация ошибки будет выглядеть так:

error(state, payload) {
    state.status.success = false;
    state.status.loading = false;
    state.status.error = payload || false;
}

Ваш шаблон будет просто слушатьна store.state.status

<div v-if="store.state.status.error">{{store.state.status.error}}</div>

Я могу ошибаться, но по моему личному мнению я считаю, что неправильно использовать действия, чтобы вернуть вещи.Вы пользуетесь магазином, поэтому можете использовать его как можно лучше.

Другими дополнительными преимуществами является то, что вы можете указать свой файл .vue, если загружается api или когда что-то происходит успешно.

0 голосов
/ 11 декабря 2018

То, что я закончил, было довольно просто.Я приковал цепочку к моей отправке:

this.$store.dispatch('setValue', this.Value)
      .then(response => {
        console.log(response)
})
.catch(error => {
              if (error.response.status === 412) {
                return "some message"
     }
});

Затем я ответил на вызов Axios из действия:

return axios({
   method: 'post',
    url: `/mypath,
    data: mydata,
    json: true,
})

Это означает, что я мог иметь дело с возвращенными данными / ошибками локально, где яхотел вызвать действие.

0 голосов
/ 10 декабря 2018

Магазин:

.catch(error => {
  if (error.response.status === 412) {
      throw error
  }
});

Элемент Vue с асинхронным методом:

try{
    let response = await this.$store.dispatch('setValue', this.Value)
} catch(error) {
    console.log(error)
});
...