2017-12-01 22 views
0

条件付き非同期コードパターン

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

は必ず実行する必要がありますコードを処理するためのより良い方法はありますが、非同期コードが実行されている場合、それが終了するのを待つ必要がありますか?あなたはこのような何か考えるかもしれません

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

答えて

0

あなたは空の約束を作成することができます

let promise = Promise.resolve(); 

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

promise.then(after); 

ような醜いに見えますが、あなたは合格どこでこのパターンを使用することができることを考えますコールが行われるべきかどうかを示すフラグではなく関数に約束するか、非同期呼び出しの約束を返すか、すでに約束している約束を返す別の関数に引数を渡すことができます。

afterを一度参照するだけで、コードはよりDRYになります。