2016-08-19 6 views
6

node.jsを使用しています。私は、特定のアクションを実行する間に遅延を導入すると約束しているこの機能を持っています。node.jsでこの一連のアクションを永久に繰り返す

function do_consecutive_action() { 
    Promise.resolve() 
     .then(() => do_X()) 
     .then(() => Delay(1000)) 
     .then(() => do_Y()) 
     .then(() => Delay(1000)) 
     .then(() => do_X()) 
     .then(() => Delay(1000)) 
     .then(() => do_Y()) 
    ; 
} 

私がしたいことは、この一連のアクションを永遠に繰り返すことです。これはnode.jsでどのように行うことができますか?

//make following actions repeat forever 
do_X() 
Delay(1000) 
do_Y() 
Delay(1000) 

EDIT:問題を解決するためにリピートキューを使用する回答に対して、賞金を始めました。

+1

あなたの例では、非同期動作を示し、その後、あなたは可能ではない言葉の同期を使用していました。 – zzzzBov

+0

ありがとうございます。それに応じて質問の詳細を変更しました。 –

+0

コメントを見て、質問を読み直してください。あなたがおそらく使用すべきものは、約束ではなく、繰り返しの待ち行列です。遅延の長い無限ループでのパフォーマンスはおそらく大きな問題ではありませんが、待ち時間が必要ないという追加のオーバーヘッドがあります。 – zzzzBov

答えて

4

だけで再帰を使用

function do_consecutive_action() { 
    Promise.resolve() 
     .then(() => do_X()) 
     .then(() => Delay(1000)) 
     .then(() => do_Y()) 
     .then(() => Delay(1000)) 
     .then(() => do_consecutive_action()) 
     // You will also want to include a catch handler if an error happens 
     .catch((err) => { ... }); 
} 
+1

do_Xまたはdo_Yがスローされたらどうなりますか? –

+0

@BenjaminGruenbaum良い点! – Mike

0
function cb(func) { 
    try { 
     func(); 
    } 
    catch (e) { 
     do_consecutive_action(); 
    } 
} 

function do_consecutive_action() { 
Promise.resolve() 
    .then(() => cb(do_X)) 
    .then(() => Delay(1000)) 
    .then(() => cb(do_Y)) 
    .then(() => Delay(1000)) 
    .then(() => do_consecutive_action()) 
    // You will also want to include a catch handler if an error happens 
    .catch((err) => { ... }); 

}

関連する問題