Ich habe dieses Versprechen, dass ein neues Item
Dokument erstellt, wenn es nicht in der DB gefunden wird, und speichert sie dann in einem zuvor Collection
Dokument erstellt ..Bluebird Promise serielle Iteration und zu modifiziertem Array auflösen?
The Collection Dokument der erste String in einem Array ist, und jeder nachfolgende Der Index im Array wird in eine oder mehrere Dokumentdateien übersetzt.
Promise.each "Resolves to the original array unmodified" und so die letzte return
im Promise.each
wird die Objekte machen, aber die nachfolgende .then
erzeugt das ursprüngliche Array ..
Hier ist das Versprechen (abgekürzt für Lesbarkeit):
globalVar = true;
collectionId = "";
var itemSeries = Promise.each(items, function(element) {
if (globalVar == true) {
return Models.Collection.findOneAsync({
"name": element
})
.then(function(collection) {
// promise chain similar to the following else..
// set the collectionId var to an _id
});
} else {
return Models.Items.findOneAsync({
"name": element
})
.then(function(item) {
if (item == null) {
return Models.Labels.findOneAsync({
"title": element
})
.then(function(label) {
var newItem = new Models.Items({
name: element,
label: label._id
});
return newItem.saveAsync();
}).then(function() {
return Models.Items.findOneAsync({
"name": element
});
}).then(function(item) {
item.collection = collectionId;
return item.saveAsync();
}).then(function() {
return Models.Items.findOneAsync({
"name": element
});
}).then(function(item) {
allItems.push(item);
console.log("allItems: [ ");
console.log(allItems);
return allItems;
});
}
});
}
}).then(function(allItems) {
console.log("allItems: [ ");
console.log(allItems);
return allItems;
});
Und hier ist der letzte der console.log
im Promise.each:
allItems: [
[ { _id: 54eec5f2b9fb280000286d52,
name: 'one',
label: 54eec5f2b9fb280000286d51,
collection: 54eec5f2b9fb280000286d50,
__v: 0 },
{ _id: 54eec5f2b9fb280000286d54,
name: 'two',
label: 54eec5f2b9fb280000286d53,
collection: 54eec5f2b9fb280000286d50,
__v: 0 } ]
Und dann nach der anschließenden .then(function(allItems) {
hier ist das letzte console.log
:
allItems: [
[ 'collectionName', 'one', 'two' ]
Auch später die Variable itemSeries
dass = Promise.each
undefined
in einem Promise.join macht?
Alles klar, wie kann der 'allItems'-Wert zurückgegeben werden? .each ist notwendig, weil die Reihenfolge erforderlich ist. – Stacks
@Maji hat einen Kommentar zu meinem Kommentar hinzugefügt. –
fwiw .Each funktioniert wie .mapSeries in 3.0 seit der Rückgabe der vorhandenen Array hasnt war nützlich – Esailija