Как обрабатывать исключения из обещаний в TypeScript с помощью async await?

#typescript #error-handling #promise #async-await

#typescript #обработка ошибок #обещание #async-await

Вопрос:

Я пытаюсь найти хороший способ обработки исключений в TypeScript с помощью обещаний с помощью async / await

Вот что у меня есть на данный момент

     private async initDirectoryEntry(cacheDirectoryName: string): Promise<DirectoryEntry> {
        const cacheDirectoryEntry = await this.resolveLocalFileSystemDirectory(this.file.cacheDirectory);
        return this.file.getDirectory(cacheDirectoryEntry as DirectoryEntry, cacheDirectoryName, { create: true })
    }

    private async resolveLocalFileSystemDirectory(path: string): Promise<DirectoryEntry|Error> {
        return new Promise<DirectoryEntry>((resolve, reject) =>
            this.localFileSystem.resolveLocalFileSystemURL(
                path,
                (entry) => {
                    if (!entry.isDirectory) {
                        reject(new Error(`${path} is not a directory`))
                    } else {
                        resolve(entry as DirectoryEntry);
                    }
                },
                (error) => reject(error))
        )

    }
  

Сам код компилируется, но меня раздражало, что мне приходилось указывать |Error в возвращаемом типе Promise и выполнять явное приведение в initDirectoryEntry .

Не уверен, что я делаю здесь что-то неправильное. Я думаю, я должен быть в состоянии сказать throws Exception что-то вроде или что-то в этом роде и перехватить это соответствующим образом.

Комментарии:

1. |Error здесь неверно, потому T что in Promise<T> — это тип разрешенного значения. reject всегда получает any значение. Так что в вашем случае Promise<DirectoryEntry> достаточно. github.com/microsoft/TypeScript/blob/master/lib /…

2. Обработка ошибок при await редактировании обещаний выполняется с try помощью / catch , но, похоже, это не ваш актуальный вопрос и не имеет отношения к примеру кода. Не могли бы вы обновить заголовок своего вопроса?