#typescript #typescript-eslint
#typescript #typescript-eslint
Вопрос:
Итак, я с удовольствием использую эти промежуточные функции для переноса асинхронных операций, которые мне нужно выполнять последовательно. Например, «убедитесь, что база данных sqlite существует, затем создайте схему открытия» и т. Д. Я только что переключился на ESLint и не могу понять, какой синтаксис он хочет, и когда я даю ему то, что, по моему мнению, он хочет, это все равно не работает, а также не компилируется. Если я сделаю очевидную вещь и переключу version2 на использование Promise<boolean>
, то компиляция завершится с ошибкой: src/dimTest.ts(23,13): error TS2322: Type 'void' is not assignable to type 'boolean'
Я что-то недопонимаю в обещаниях и мне просто повезло, что это работает, или это проблема ESLint? Спасибо!
/* eslint-disable no-console */
class test {
constructor() {
// ;
}
// this is what I originally used
async version1():Promise<boolean> {
return new Promise(async (resolve,reject) => {
await this.delay(2000);
await this.delay(500);
await this.delay(250);
resolve(true)
});
}
// This method compiles but eslint is still says misused promise
async version2(): Promise<boolean> {
return new Promise(async (resolve, reject):Promise<any> => {
await this.delay(2000);
await this.delay(500);
await this.delay(250);
resolve(true);
});
}
public async main(): Promise<void> {
console.log("Hello!");
await this.version1();
console.log("Goodbye!");
console.log("Hello!");
await this.version2();
console.log("Goodbye!");
}
protected delay(ms: number = 5000 ): Promise<number> {
return new Promise((resolve) => { setTimeout(resolve, ms); });
}
}
export { test };
const dt = new test();
void dt.main();
Комментарии:
1. Это правило восхитительно, и я об этом не знал. eslint правильно помечает анти-шаблон вашего кода, и это именно то, что должен делать линтер. Как указано @ShivamPandey, в его ответе вы создаете ненужные обещания. Я бы добавил, что использование async без await также является анти-шаблоном
Ответ №1:
Если функция async
, то нет необходимости возвращать обещание,
async version1(): Promise<boolean> {
await this.delay(2000);
await this.delay(500);
await this.delay(250);
return true;
}