Как преобразовать обещание onload в Async/Await - программирование

Как преобразовать обещание onload в Async/Await

У меня есть следующий Typescript, который я хотел бы использовать async/await on. Но я не могу разобраться в моей голове, как это сделать.

private getWorkbookFromFile2(excelFile: File): Promise<xlsx.IWorkBook> {
    var loadedPromise = new Promise<xlsx.IWorkBook>((resolve, reject) => {
        var reader = new FileReader();

        reader.onload = (event: any) => {
            var data = event.target.result;

            var workbook = xlsx.read(data, { type: 'binary' });

            console.log(workbook.SheetNames);
            resolve(workbook);
        };
        reader.readAsBinaryString(excelFile);
    });

    return loadedPromise;
}

Может кто-нибудь покажет мне, как это обещание Typescript можно использовать для использования async/await

4b9b3361

Ответ 1

TypeScript теперь поддерживает асинхронные функции для двигателей, которые имеют встроенную поддержку генераторов ES6, например. Node v4 и выше. Асинхронные функции имеют префикс с ключевым словом async; Ожидание приостанавливает выполнение до тех пор, пока не будет выполнено обещание возврата асинхронной функции и не восстановит значение из возвращенного обещания. - Источник

async function getWorkbookFromFile2(excelFile: File) {
    return new Promise<xlsx.IWorkBook>((resolve, reject) => {
        var reader = new FileReader();

        reader.onload = (event: any) => {
            var data = event.target.result;

            var workbook = xlsx.read(data, { type: 'binary' });

            console.log(workbook.SheetNames);
            resolve(workbook);
        };
        reader.readAsBinaryString(excelFile);
    });
}

Пример потребления:

async function caller() {
    var workbook = await this.getWorkbookFromFile2(this.getFile());
    // The 'workbook' variable is an IWorkBook...
}