Hello there overflowers, 

I'm currently working on a project of mine, using a node server with a mongo data store. I'm currently writing some functions to populate the database for me.  

Examples of objects in the database are Users,Classes,School Years,Students ratings, etc.  

All the functions to create such objects are implemented like this : 

```
    function popUser(users){
        chain = [];
        users.forEach((v,i,a)=>{
            let p = new Promise(function(res,rej){
                let newU = new User(v);
                newU.save(()=>{
                    err && rej(err);
                    res();
                });
            });
            chain.push(p);
        });
        return chain
    }

```

In the remainder of my population module i invoke such functions depending on my needs. The order in which the above functions are called is important, thus I don't want fully parallel execution of constructors. 

With Promises I could do something like this : 

```
popUser(users).then(popClasses).then(...). ... .catch((err)=>{})

```

With Promises Chains I know that I can do the following 

```
Promise.all(usersChain).then(()=>{
    //make a new chain for Classes
    Promise.all(classesChain).then (()=>{},(err)=>{})
},(err)=>{})

```

I think we can agree that it becomes quite hard to read and understand, thus the question :

Is there a way of achieving the same results with a different, more readable syntax? 

Edit : to be clearer, usersChain and cleassesChains are arrays of Promises to create and insert some object (or objects) into the database.
I can not make a single chain because some objects might have to be inserted after some other objects have already been inserted. 

Edit : Wait, can I just call 

```
Promsie.all(populateCountersPromise).then(promise1).then(promise2).catch((err)=>{})

```