Bluebird Promise serial-iteration, und beschließen, modifizierte array?

Habe ich das Versprechen, dass eine neue Item Dokument, wenn es nicht in der db und speichert Sie dann in eine zuvor erstellte Collection - Dokument..

Der Sammlung Dokument ist die erste Zeichenkette in ein array, und alle nachfolgenden index im array bedeutet: ein oder mehrere Element docs.

Versprechen.jeder "Löst die ursprüngliche array wird nicht geändert" und so ist die Letzte return innerhalb der Promise.each ist das rendering der Objekte, sondern auch die nachfolgenden .then produziert das original-array..

Hier ist die Verheißung (gekürzt, für bessere 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 innerhalb der Verheißung.jeder:

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 die Letzte console.log:

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

Auch, die variable itemSeries dass = Promise.each später macht undefined in ein Versprechen.beitreten?

InformationsquelleAutor Stacks | 2015-02-26
Schreibe einen Kommentar