2017-09-12 3 views
0

Ich habe die folgende Methode in einer ViewModelBuilder Klasse:müssen diese Implementierung aktualisieren mit Versprechen Verkettungs

async buildViewModel(request) 
{ 
    const bsm = this.getBlogSearchMetadata(); 
    await this.getBlogPostSearchResults(request); 
    await bsm; 
    return this.vm; 
} 

Diese ursprüngliche Implementierung entworfen wurde getBlogSearchMetadata() und getBlogPostSearchResults(request) zu ermöglichen, die gleichzeitig auszuführen. Beide legen Eigenschaften auf this.vm fest, und nach Abschluss beider Methoden würde buildViewModel this.vm zurückgeben.

Ich habe eine neue Anforderung, wo Versprechen Verkettung in dieser Methode verwendet werden muss. this.getBlogSearchMetadata() muss zuerst zurückgeben, und eine then() - Versprechungskette sollte dann mit Anforderungswerten aufrufen, die auf der Grundlage der Antwort von this.getBlogSearchMetadata() festgelegt wurden.

Der Methodencode, den ich oben angegeben habe, spiegelt die aktuelle Implementierung wider. Ist das genug Code für Sie, um die spezifischen Änderungen zu beschreiben, die ich an dem Code vornehmen kann, um die neue Anforderung zu unterstützen? Beide Unterfunktionen in der Methode sind mit dem Schlüsselwort async gekennzeichnet.

+1

Hallo willkommen zu StackOverflow, diese Website ist kein Code schreiben Service, lesen Sie bitte https://StackOverflow.com/Help/how-to-ask für Informationen darüber, wie Sie am besten erhalten Hilfe zu einem bestimmten Problem Sie konfrontiert sind. –

Antwort

0

Ich habe eine neue Anforderung, wo Versprechen Verkettung in dieser Methode verwendet werden muss. this.getBlogSearchMetadata() muss zurückkehren erste und eine dann() Versprechen Kette sollte dann rufen this.getBlogPostSearchResults (Anfrage)

einfach erwarten this.getBlogSearchMetadata()

async buildViewModel(request) 
{ 
    // Await 
    const result = await this.getBlogSearchMetadata(); 

    // now you can use `result` 
    await this.getBlogPostSearchResults(request); 
    return this.vm; 
} 
0

So im Wesentlichen, async/await und Versprechungen sind genau dasselbe, sie sehen einfach anders aus. Hier sind zwei Beispiele, die genau die gleiche Art und Weise arbeiten:

// Promises 
yourFunction() { 
    yourPromise().then(value => { 
     console.log(value); 
    }); 
} 


// Async/await 
async yourFunction() { 
    let value = await yourPromise(); 
    console.log(value); 
} 

Also Kette ihnen, können Sie effektiv Standard Versprechen verwenden Chaining auf Ihrem vorhandenen async Funktionen, ohne sie zu Refactoring.

Nachdem ich Ihren Code angesehen habe, habe ich vergessen zu erwähnen: Sie können auch jedes Standardversprechen abwarten, es muss nicht unbedingt eine asynchrone Funktion sein.

Verwandte Themen