2017-05-03 3 views
-2

Ich arbeite an einem Problem, in dem ich eine eindeutige ID für Benutzer generieren muss, aber ich bin nicht in der Lage, herauszufinden, wie Sie die While-Schleife innerhalb einer Promise.Following-Funktion zu brechen Finden Sie, ob der Benutzer mit derselben ref_id existiert oder nicht, und geben Sie mir dann eine Entschlossenheitserklärung zurück.Stop While-Schleife in einem Versprechen in Knoten js

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); 

}); 
} 

Antwort

0

ich mit einer rekursiven Funktion für diese gehen würde. While-Loops vermischen sich nicht gut mit Versprechen, da sie asynchron sind.

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

Sie würden dann wie so verwenden:

makeRefId().then(refId => { 
    // Do whatever with refId 
}); 
Verwandte Themen