- Я должен получить с сервера некоторую информацию.
- Если информация неверна, я должен получить информацию, используя другой запрос к серверу.
- Если информация не верна снова в силе, я должен вернуть отклоненное обещание (ошибка)
- Если информация действительна на 2 или 3 шагах, я должен сохранить ее и вернуть решенное обещание с кодом вызова
Я сделал это с помощью async / await. Но я не могу понять, как это сделать, используя тогда и ловить блоки.
Мой код:
this.loadSettingReport()
.then(() => {
console.log("Success!")
})
.catch((error) => {
console.log("Promise worked with Error")
console.log(error)
})
//...
async loadSettingReport() {
console.log("SettingReport - Company")
let response = await findAllSettingsReports(this.$axios, /*someParameters*/) //request via axios - return promise
let data = response.data
console.log(data)
if(data.length === 0) {
console.log("SettingReport - Common")
response = await findAllSettingsReports(this.$axios, /*other someParameters*/) //request via axios - return promise
data = response.data
if (data.length === 0) {
console.log("SettingReport - NotFound")
throw new Error("SettingReport - NotFound")
}
}
//Do something...
},
//...
export const findAllSettingsReports = function($axios, params = {}){
return $axios.get(url, isEmpty(params) ? {} : { params: params })
}
ОБНОВЛЕНИЕ: Мой последний вариант:
loadSettingReport() {
return findAllSettingsReports(this.$axios, {variant: "ID", rows: true, search: "common:false,company.id:"+this.company.id + ",typeReport.id:" + this.typeReportId})
.then(response => {
if(response.data.length == 0) {
return findAllSettingsReports(this.$axios, {variant: "ID", rows: true, search: "common:true,typeReport.id:" + this.typeReportId})
}
return response
})
.then(response => {
if(response.data.length == 0) {
throw new Error("Настройка отчетов не найдена")
}
this.setting = response.data[0]
return response.data[0]
})
}