-3
因爲我在工作中使用異步。我將發送ajax請求,然後收到。如何處理異步的邏輯錯誤?
我會這樣寫。
const API = {
init() {
this.initIndexData();
},
async initIndexData() {
try {
let data = await this.getData();
} catch (e) {
console.log(e);
}
},
getData() {
new Promise((resolve, reject) => {
$.ajax({
url: 'xx.json',
success(res) {
if (res.success) {
resolve(res);
} else {
reject(res);
}
}
})
});
}
}
API.init();
因爲我不喜歡wirte代碼try..catch
。有沒有解決方案來處理reject
而不使用try catch
。
我想我可以隨時使用reolve
每當發生什麼事情。喜歡這個。
if (res.success) {
resolve(res);
} else {
reject(res);
}
...
let data = await this.getData();
if (data.success) {
// do sth success logic
} else {
// do sth error logic
}
以上是應對reject
沒有try catch
的解決方案,但是這個代碼是不是語義。
「*我不喜歡用'try..catch' * WIRTE代碼」 - 爲什麼? – Bergi
@Bergi我想當我使用try .. catch時,我不知道會發生什麼錯誤。但在我寫的例子中,你可以看到發生了什麼錯誤,所以我認爲沒有必要使用try .. catch處理這個錯誤。 – qiuyuntao
好吧,如果你只想捕捉'!res.success'的情況,那麼也許你應該用'res'解決'並且把你想要處理的條件放在那裏。如果出現網絡問題,JSON語法錯誤或其他問題,您的承諾也會拒絕(並且「catch」會觸發)。 – Bergi