如何将onload promise转换为Async/Await

Vac*_*ano 10 promise async-await typescript es6-promise

我有以下的打字稿,我想用async/ await上.但我似乎无法在脑海中解决这个问题.

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;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我这个Typescript承诺如何转换为使用async/await

Dav*_*ine 24

TypeScript现在支持对ES6生成器具有本机支持的引擎的异步函数,例如Node v4及更高版本.异步函数以async关键字为前缀; await挂起执行,直到满足异步函数返回promise,并从返回的Promise中解除值.- 来源

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);
    });
}
Run Code Online (Sandbox Code Playgroud)

消费示例:

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

  • 那么没有办法在 reader 和 `onload` 上使用 wait 吗? (2认同)