2017-05-03 27 views
-2

私はユーザの一意のIDを生成しなければならない問題に取り組んでいますが、Promise.Following関数のwhileループをどのように中断するかを理解できません同じref_idを持つユーザーが存在するかどうかを確認してから解決の約束を返します。ノードjsの約束の中でwhileループを停止する

function makeRefId() { 

return new Promise(function(resolve , reject){ 
    var refId = null; 
    var flag = true; 
    var tempUser ; 

    do{ 
     refId = randomId(); //this will return a random string 
     console.log(refId); 

     tempUser = User.findOneAsync({ref_id:refId}).then(function(user){ 
      if(user == null) 
      { 
       flag = false; 
       resolve(refId); 
      } 
     }); 

    }while(flag); 

}); 
} 

答えて

0

私はこれに対して再帰関数を使用します。 Whileループは、非同期であるため、約束事とうまく調和しません。

function makeRefId() { 
    const refId = randomId(); 
    return User.findOneAsync({ ref_id: refId }).then((user) => { 
     if (!user) { 
      return refId; 
     } else { 
      return makeRefId(); 
     } 
    }); 
} 

その後、としてそれを使用したい:

makeRefId().then(refId => { 
    // Do whatever with refId 
}); 
関連する問題