2017-05-01 2 views
0

unten ist das Muster, das ich verwende Versprechen zurückzukehren, von innen asynchronen Funktionen:Rückkehr Versprechen von Rückrufen innerhalb Asynchron-Funktionen

async call(id: string, inputs: Array<string>): Promise<any> { 
    return new Promise(async (resolve, reject) => { 

     await this.loadCache(); 

     async.each(inputs, async (k, c) => { 
      try { 
       c(); // Do something here 
      } catch (error) { 
       reject(); 
      } 
     }, async e => { 
      await this.callInternal(id); 
      resolve(); 
     }); 
    }); 
} 

Wie Sie mehr Versprechen der Rückkehr Funktionen sehen geben, die ich in dem Versprechen Konstruktor rufe mit erwarten. Ich bin kein großartiger JavaScript/Typescript-Programmierer, also möchte ich wissen, ob es ein besseres Muster gibt, um diese Funktion zu erstellen.

Antwort

1

es so scheint, ist ähnlich dem, was Sie tun:

async call(id: string, inputs: Array<string>): Promise<void> { 
    await this.loadCache(); 
    await Promise.all(inputs.map(input => input())); // see below 
    await this.callInternal(id); 
} 

Eine async Funktion gibt bereits ein Versprechen, so dass Sie nicht den Inhalt von call mit einem neuen Versprechen wickeln müssen.

Ich bin nicht klar, was die async.each() in Ihrem Beispiel Code tut: es c, ruft die von der Asynchron-Iterator Rückruf ist, aber ich nehme an, Sie k anrufen möchten.

Es sieht auch so aus, als ob diese Funktion synchron ist, sonst hätten Sie entweder einen Rückruf bestanden, oder Sie hätten den Anrufen await vorangestellt.

Ich habe eine Vermutung, dass inputs ist eine Reihe von Funktionen, die verspricht, und dass jede Funktion muss parallel aufgerufen werden.

+1

Ich vermute, der Rückgabetyp der Funktion sollte Versprechen Daryl

+0

@Daryl sein, die ich sehr begrenzte TS Erfahrung haben, so habe ich keine Ahnung: D – robertklep

+0

es sollte eine Lücke sein, da man nicht wirklich etwas zurückkehr dh Keine Auflösung (obj), nur eine Auflösung(). – Daryl

Verwandte Themen