Bluebird Promesse de série de l'itération, et la volonté de le tableau modifié?

J'ai cette promesse, qui crée un nouveau Item document s'il n'est pas trouvé dans la base de données, puis les stocke dans un créé précédemment Collection document..

La Collection de documents est la première chaîne dans un tableau, et tout autre indice dans le tableau se traduit par un ou plusieurs Élément docs.

Promesse.chaque "Résout le tableau original non modifié" et donc le dernier return dans le Promise.each est de restituer les objets, mais, par la suite .then produit le tableau d'origine..

Voici la promesse (en abrégé pour des raisons de lisibilité):

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

Et voici le dernier de la console.log au sein de la Promesse.chaque:

allItems: [ 
[ { _id: 54eec5f2b9fb280000286d52,
name: 'one',
label: 54eec5f2b9fb280000286d51,
collection: 54eec5f2b9fb280000286d50,
__v: 0 },
{ _id: 54eec5f2b9fb280000286d54,
name: 'two',
label: 54eec5f2b9fb280000286d53,
collection: 54eec5f2b9fb280000286d50,
__v: 0 } ]

Et puis après que la réparation .then(function(allItems) { voici la dernière console.log:

allItems: [ 
[ 'collectionName', 'one', 'two' ]

Aussi, la variable itemSeries que = Promise.each plus tard rend undefined en une Promesse.rejoindre?

OriginalL'auteur Stacks | 2015-02-26