web-dev-qa-db-ja.com

onloadpromiseをAsync / Awaitに変換するにはどうすればよいですか

async/awaitで使用したい次のTypeScriptがあります。しかし、私はこれをどのように行うかを頭の中で整理することができないようです。

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を使用するように変換する方法を誰かに教えてもらえますか

10
Vaccano

TypeScriptは、ES6ジェネレーターをネイティブでサポートするエンジンの非同期関数をサポートするようになりました。 Node v4以降。非同期関数の前にはasyncキーワードが付いています。awaitは、非同期関数のreturn 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);
    });
}

消費例:

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