2016-07-07 14 views
5

async/await'u kullanmak istediğim şu dökümanı kullanıyorum. Ama kafamın içinde bunu nasıl yapacağımı açıklayamıyorum.Yüklemeye ilişkin sözümü Async/Await'e nasıl dönüştürebilirim

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; 
} 

birisi şimdi ES6 jeneratörler, örneğin için doğal destek motorları için asenkron işlevlerini destekleyen bu typescript söz async/await

+0

https://www.typescriptlang.org/docs/release-notes/typescript-1.7.html –

cevap

12

typescript kullanmak dönüştürülebilir nasıl gösterir misin Düğüm v4 ve üstü. Eşzamansız işlevler, async anahtar sözcüğüyle öneklenir; Bekleme işlevi, bir eşzamanlı olmayan işlev döndürme sözü yerine getirilinceye kadar yürütmeyi askıya alır ve verilen sözün değerini kaldırır. - Source

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); 
    }); 
} 

Örnek tüketimi:

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

bekliyor kullanmak yolu yoktur Yani okuyucunun ve 'yükün üzerinde? – Vaccano

+1

Hayır, asenkronize işleminizin en düşük seviyesi olması gerekmiyor. Sözün anlamı, 'yük' 'çözmeyi '' çağırdığında bu işlevden döneceğinizdir. bu mantıklı mı? Temel olarak tüm boilerplate kodunu gıda zincirinin yukarısına çıkaracak şekilde kaldırıyorsunuz, böylece bu işlevin arayanları eski zincirleme API'sini kullanmak yerine 'beklemiyor'. –

+0

@DavidPine, bu işlevin daha eksiksiz bir örnek olması için 'bekle' ile nasıl kullanılabileceğinin bir örneğini gösterebilir mi? –

İlgili konular