- Мне нужно получить с сервера некоторую информацию.
- Если информация недействительна, я должен получить информацию, используя другой запрос к серверу.
- Если информация снова недействительна, я должен вернуть отклоненное обещание (ошибка)
- Если информация действительна на 2 или 3 шагах, я должен сохранить ее и вернуть обработанное обещание в вызывающий код.
Я сделал это с помощью async / await. Но я не могу понять, как это сделать, используя блоки then и catch.
Мой код:
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]
})
}
try
находится подthen
и подcatch
, как под обещанием, в сравнительном мысленном образе, вот так! - person cybercoder   schedule 08.02.2020