2017-12-01 3 views
0

den folgenden Code ein Muster Gegeben:Conditional async Codemuster

if (doAsyncCall) { 
    asyncCall().then(after); 
} else { 
    after(); 
} 

Gibt es einen besseren Weg, um den Code zu behandeln, die immer laufen sollte, aber wenn der Asynchron-Code ausgeführt wird, sollte warten, bis es zu beenden?

Antwort

0

Sie können ein leeres Versprechen erstellen:

const step1 = doAsyncCall ? asyncCall() : Promise.resolve(); 
step1.then(after); 
0

Sie so etwas wie dieses interessieren könnten:

let promise = Promise.resolve(); 

if (doAsyncCall) { 
    promise = asyncCall(); 
} 

promise.then(after); 

Das so hässlich aussieht, aber bedenken Sie, dass Sie dieses Muster verwenden könnte, wo man einen Pass Versprechen Sie in eine Funktion und nicht in ein Flag, um anzuzeigen, ob ein Anruf getätigt werden soll, oder Sie können ihn in eine andere Funktion einteilen, die entweder die Async-Call-Zusage oder eine bereits aufgelöste Zusage zurückgibt.

Wenn Sie nur einmal auf after verweisen, ist der Code DRY.