2017-12-12 5 views
0

Ich habe eine Funktion, die eine Zeichenfolge von Benutzernamen nimmt, teilt sie am Komma und muss dann überprüfen, ob dieser Benutzername in der Datenbank vorhanden ist und wenn ja, seine ID in einem Array.Rückkehr von mongoose Abfrage zu übergeordnete Funktion

Das Problem ist, dass vor allen Abfragen die Funktion bereits zurückgegeben wurde, weil Mungo async ist. Wie mache ich das, während ich immer noch die Rückkehr von der exportierten Funktion verwende, um das Array von Benutzer-IDs zurückzugeben?

Antwort

0

Sie könnten alle passenden Dokumente in einem Rutsch finden und schicken Sie das Versprechen:

module.exports = function (peopleString) { 

    // Split string into array 
    let people = peopleString 
    .split(',') 
    .map(person => person.replace(/ /g,'')) 

    // Find all users where username matched any value in the array 
    // Return a promise which will eventually resolve to an array of ids 
    return users 
    .find({ username: { $in: people } }) 
    .then(docs => docs.map(doc => doc._id)) 

} 

... und dann können Sie das zurückgegebene Versprechen handhaben, wo Sie die Funktion wie folgt verwendet werden:

// Import your function 
const getUserIds = require('./get-user-ids') 

// Your string of people 
const peopleString = ' ... ' 

// Call then/catch on the eventual result 
getUserIds(peopleString) 
    .then(ids => { 
    // Handle results 
    }) 
    .catch(err => { 
    // Handle error 
    }) 

Ich hoffe, das hilft.