Как я могу заставить этот фрагмент соответствовать правилам eslint или сделать его более читабельным / элегантным без вложенных обещаний?
class Sync {
io = IO.getInstance();
constructor(token) {
this.token = token;
}
sendMessage = (
data,
retryTimeout = 0,
) => {
const response = this.io.request(requestConfig); // should return a Promise
const timeout = retryTimeout + 3000;
// want to retry when AJAX error
return response
.catch(() => new Promise((resolve, reject) => {
if (this.token === data.token) {
// eslint warning: Avoid nesting promises.eslint(promise/no-nesting)
setTimeout(() => this.sendMessage(data, timeout).then(resolve, reject), timeout);
} else {
reject(new Error('Failed to send message due to network offline'));
}
}));
}
}
class Sync {
async sendMessage(data, retryTimeout = 0) {
const timeout = retryTimeout + 3000;
try {
await this.io.request(requestConfig); // should return a Promise
} catch(e) {
if (this.token === data.token) {
await new Promise(resolve => {
setTimeout(resolve, timeout);
});
return this.sendMessage(data, timeout);
} else{
throw new Error('Failed to send message due to network offline');
}
}
}
Я пытался изменить это на
async
функцию, все в порядке сейчас? или как мне сделать это правильно?
Спасибо.