2016-06-29 15 views
0

Ich habe eine api, die ein neues Dokument in mongodb mit dieser Funktion erstellt:Chaining Mungo Versprechen in einem for-Schleife

export function create(req, res) { 
    return Track.create(req.body) 
    .then(respondWithResult(res, 201)) 
    .catch(handleError(res)); 
} 

Das kommt noch hinzu, ein neues Dokument, würde Ich mag diese erweitern und nach dem Dokument war hinzugefügt würde ich gerne einige weitere Dokumente in eine andere Sammlung mit den Informationen aus der Antwort, so etwas fügen:

export function create2(info) { 
    var trackId = info._id; 
    var users = info.users; 

    var basic = { 
    trackId : trackId 
    }; 

    for (let user of users) { 
    basic.username = user.username; 

    Location.create(basic); 
    } 
} 

ich möchte die create2 Funktion auf einem .then der Verheißung von der ersten erstellen Funktion aufzurufen etwas wie dieses:

Das Problem ist, dass create2 keine Zusage zurückgibt und ich nicht wirklich weiß, wie die von Location.create in create2 zurückgegebenen Versprechen verkettet werden?

Antwort

1

Der Weg, create2 eine Verheißung zurückzugeben ist mit Promise.all(), die erfüllt wird, wenn das Array der Versprechen, die an es übergeben werden, alle erfüllt sind. So etwas wie dies ...

var _ = require('underscore'); // optional but useful for a better loop with '.map' 

export function create2(info) { 
    var trackId = info._id; 
    var users = info.users; 

    var basic = { 
    trackId : trackId 
    }; 

    var promises = _.map(users, function(user) { 
    basic.username = user.username; 
    return Location.create(basic); 
    }); 
    return Promise.all(promises); 
} 
+0

ich alle Versprechungen in ein Array geschoben und verwendet, um dieses Paket: https://www.npmjs.com/package/q sie zu verschmelzen mit Q.all (arrayOfPromises) – exilonX

+1

I nahm native Unterstützung an, aber q ist gut. Ich denke, du kannst Mongoose sagen, dass du das auch benutzt, wie in 'mongoose.Promise = require ('q'). Promise;' – danh