2017-11-29 4 views
0

node.jsには、ドロップチャンスに基づいてdbからランダムな項目を選択する関数があります。私の友人は、dbからのいくつかのアイテムが入荷していないときに、いつでもドロップチャンスを編集するのが怠惰だからです。私はそれらも同様に計算する必要があります。したがって、在庫切れの商品がランダムに選択された場合、私は再び機能を実行する必要があります。在庫切れの場合は、在庫がある商品を取得するために再度機能を実行する必要があります。Node.jsレスポンスが空でない限り関数を繰り返す方法

私の質問は:希望の応答が得られるまでnode.jsでどのように機能を繰り返すのですか? 私の関数は次のようになります。

function fnPickWinnerItem(chances,cb){ 
var ajChances=chances; 
var iRandomNumber=getRandomInt(ajChances[0].chanceStart,ajChances[ajChances.length-1].chanceEnds); 
var aDrop=ajChances.map(function(data){ 
    var input=data; 
    var iGroupId=input.groupId 
    var iStartChance=input.chanceStart; 
    var iEndChance=input.chanceEnds; 
    var jResponse={"groupId":iGroupId, "status":"win"} 
    var jResponseFalse={"groupId":"none", "status":"false"} 
    if(iStartChance<=iRandomNumber&&iRandomNumber<=iEndChance){ 
     // var response= select from db & validate -> if ok return true else 
    false 
     if(response){ 
      return jResponse; 
     } 
     else{run function again} 
    } 
    else{ 
     return jResponseFalse; 
    } 

}) 
cb(aDrop); 

}

+0

有効な応答を待つ 'while'ループが必要なのでしょうか? – tadman

+0

ええ、私はどこにループを置くべきですか?もし私がこの関数に入れて、それを再び呼び出すと、それは間違った応答になるでしょう。私は2つのループを実行して終了します – trixo

+0

あなたはここで必要な回数だけ呼び出すことができますし、ループの内側にある*。 – tadman

答えて

0

なぜそれを再帰的なやり方をしませんか?それはとても簡単です。 Whileループは、非同期関数を使用している場合は機能しません。

if (response) { 
    return jResponse; 
} 
else { 
    return fnPickWinnerItem(chances,cb); 
} 
+0

これは元のコールバックに出力されますか?私はコールバック地獄で私はそれを取得する必要がある多くの機能を持っているので – trixo

+0

戻り値fnPickWinnerItem(チャンス、CB)を使用する場合は、はい。 – itsundefined

関連する問題