Selaa lähdekoodia

Port some functions to async/await

Thomas Dy 4 vuotta sitten
vanhempi
commit
16f922c06d
2 muutettua tiedostoa jossa 29 lisäystä ja 33 poistoa
  1. 16 16
      src/audio.ts
  2. 13 17
      src/level.ts

+ 16 - 16
src/audio.ts

@@ -15,26 +15,26 @@ namespace audio {
       return this.context.currentTime;
     }
 
-    loadTrack(url: string): Promise<Track> {
-      return window.fetch(url)
-        .then(response => response.arrayBuffer())
-        .then(buffer => this.context.decodeAudioData(buffer))
-        .then(audioBuffer => new Track(this, audioBuffer))
+    async loadTrack(url: string): Promise<Track> {
+      const response = await window.fetch(url);
+      const buffer = await response.arrayBuffer();
+      const audioBuffer = await this.context.decodeAudioData(buffer);
+      return new Track(this, audioBuffer);
     }
 
-    loadTrackFromFile(file: File): Promise<Track> {
-      let promise = new Promise<ArrayBuffer>((resolve, reject) => {
-        let reader = new FileReader();
+    async loadTrackFromFile(file: File): Promise<Track> {
+      const promise = new Promise<ArrayBuffer>((resolve, _) => {
+        const reader = new FileReader();
         reader.onload = () => resolve(reader.result as ArrayBuffer);
         reader.readAsArrayBuffer(file);
       });
-      return promise
-        .then(buffer => this.context.decodeAudioData(buffer))
-        .then(audioBuffer => new Track(this, audioBuffer))
+      const buffer = await promise;
+      const audioBuffer = await this.context.decodeAudioData(buffer);
+      return new Track(this, audioBuffer);
     }
 
-    loadTrackWithProgress(url: string, listener: (event: ProgressEvent) => any): Promise<Track> {
-      let promise = new Promise<ArrayBuffer>((resolve, reject) => {
+    async loadTrackWithProgress(url: string, listener: (event: ProgressEvent) => any): Promise<Track> {
+      const promise = new Promise<ArrayBuffer>((resolve, reject) => {
         let xhr = new XMLHttpRequest();
         xhr.open('GET', url);
         xhr.responseType = 'arraybuffer';
@@ -43,9 +43,9 @@ namespace audio {
         xhr.onerror = () => reject();
         xhr.send();
       });
-      return promise
-        .then(buffer => this.context.decodeAudioData(buffer))
-        .then(audioBuffer => new Track(this, audioBuffer))
+      const buffer = await promise;
+      const audioBuffer = await this.context.decodeAudioData(buffer);
+      return new Track(this, audioBuffer);
     }
   }
 

+ 13 - 17
src/level.ts

@@ -36,29 +36,27 @@ namespace level {
     levelSets: LevelSet[]
   }
 
-  export function loadFromJson(url: string): Promise<Config> {
-    return window.fetch(url)
-      .then(response => response.json())
+  export async function loadFromJson(url: string): Promise<Config> {
+    const response = await window.fetch(url);
+    return await response.json();
   }
 
   let parser = new DOMParser();
 
-  function parseXML(response: Response): Promise<Document> {
-    return response.text().then(text => {
-      let normalized = text.replace(/[“”]/g, '"');
-      return parser.parseFromString(normalized, "text/xml");
-    });
+  async function parseXML(response: Response): Promise<Document> {
+    const text = await response.text();
+    let normalized = text.replace(/[“”]/g, '"');
+    return parser.parseFromString(normalized, "text/xml");
   }
 
-  export function loadFromTM(base: string): Promise<Config> {
+  export async function loadFromTM(base: string): Promise<Config> {
     let settingsXML = window.fetch(base+'/settings.xml').then(parseXML);
     let levelSets = window.fetch(base+'/folderlist.xml')
       .then(parseXML)
       .then(dom => parseTMFolderList(base, dom));
 
-    return Promise.all([settingsXML, levelSets]).then(pair => {
-      return parseTMSettings(base, pair[1], pair[0]);
-    })
+    const [settings, levels] = await Promise.all([settingsXML, levelSets]);
+    return parseTMSettings(base, levels, settings);
   }
 
   function parseTMSettings(base: string, levelSets: LevelSet[], dom: Document): Config {
@@ -119,7 +117,7 @@ namespace level {
     return Promise.all(promises);
   }
 
-  function parseTMFolder(base: string, name: string, dom: Document): Promise<LevelSet> {
+  async function parseTMFolder(base: string, name: string, dom: Document): Promise<LevelSet> {
     let musicList = dom.querySelectorAll('musicinfo');
     let promises = [];
     for (let i = 0; i < musicList.length; ++i) {
@@ -157,10 +155,8 @@ namespace level {
 
       promises.push(promise);
     }
-    return Promise.all(promises)
-      .then(levels => {
-        return { name, levels }
-      })
+    const levels = await Promise.all(promises);
+    return { name, levels }
   }
 
   function parseTMSong(dom: Document): Line[] {