Bluebird Promisfy.jeder, der mit for-Schleifen und if-Anweisungen?
Gerade jetzt, in der übergeordneten for-Schleife (m < repliesIDsArray.length
) abgeschlossen ist, bevor die ersten findOne feuert, so dass diese alle nur Schleifen durch das Letzte element des repliesIDsArray..asynchronen..
Was ist die korrekte syntax für eine promisified version dieses codeset? Bin neu promisification, und Fragen sich, wie zu Beginn dieses promisify + Schleife über arrays + - Konto für wenn-Aussagen..
Bluebird erforderlich ist, und Promise.promisifyAll(require("mongoose"));
genannt wird.
for(var m=0; m<repliesIDsArray.length; m++){
objectID = repliesIDsArray[m];
Models.Message.findOne({ "_id": req.params.message_id},
function (err, doc) {
if (doc) {
//loop over doc.replies to find the index(index1) of objectID at replies[index]._id
var index1;
for(var i=0; i<doc.replies.length; i++){
if (doc.replies[i]._id == objectID) {
index1 = i;
break;
}
}
//loop over doc.replies[index1].to and find the index(index2) of res.locals.username at replies[index1].to[index2]
var index2;
for(var j=0; j<doc.replies[index1].to.length; j++){
if (doc.replies[index1].to[j].username === res.locals.username) {
index2 = j;
break;
}
}
doc.replies[index1].to[index2].read.marked = true;
doc.replies[index1].to[index2].read.datetime = req.body.datetimeRead;
doc.replies[index1].to[index2].updated= req.body.datetimeRead;
doc.markModified('replies');
doc.save();
}
}); //.save() read.marked:true for each replyID of this Message for res.locals.username
} //for loop of repliesIDsArray
Sie können
Vielen Dank für das heads-up.. dieses zu Testen:
Promise.each
mit .fineOneAsync
Vielen Dank für das heads-up.. dieses zu Testen:
Promise.each(function(repliesIDsArray) { console.log('is repliesIDsArray here now equivalent to repliesIDsArray[i] ? ' + repliesIDsArray ); });
Protokolle dieses aber: Possibly unhandled TypeError: fn must be a function
.. würde auf jeden Fall zu schätzen wissen, ein Beispiel dafür, wie dieseInformationsquelleAutor StackThis | 2014-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Benjamin sagte, statt mit
for
- Schleife, verwenden SiePromise.each
(oder.map
)Blick auf die Bluebird-API-docs hier und Suche "Beispiel für statische anzeigen:". Mit
map
ist klarer zu verstehen als Dokumentation füreach
Aus der docs
.each
(oder.map
) nimmt "an array, or a promise of an array, which contains promises (or a mix of promises and values)
", das bedeutet, dass Sie können verwenden Sie es mit einem array aus 100% reinen Werte kickoff Versprechen KetteHoffe, es hilft!
Das wird nicht funktionieren, Sie muss zurück, die Versprechen, die in der Funktion in der
.each
, sonst hat es keine Möglichkeit zu wissen, das Versprechen ist gemacht. Wenn Sie irgendwelche Vorschläge haben, über die docs, die ich lieben würde, Sie zu hören und entsprechend bearbeitet.Dank guter Fang ich korrigiert. Docs sind toll, nur, was ich hinzufügen würde, ist 'statisch' Beispiel für
.each
vielleicht. Ich wies ihn auf den "static map" - Sektion, da hat es das Beispiel ausgehend Versprechen mit einem arrayvielen Dank dafür, funktioniert perfekt jetzt
Danke für deine schnelle Antwort @aarosil . Eigentlich war es korrekt funktioniert. Ich hatte andere Probleme im code. Es funktioniert jetzt gut.
InformationsquelleAutor aarosil