¿La forma más sencilla de esperar algunas tareas asíncronas completas, en Javascript?

Quiero eliminar algunas colecciones mongodb, pero eso es una tarea asíncrona. El código será:

var mongoose = require('mongoose');

mongoose.connect('mongo://localhost/xxx');

var conn = mongoose.connection;

['aaa','bbb','ccc'].forEach(function(name){
    conn.collection(name).drop(function(err) {
        console.log('dropped');
    });
});
console.log('all dropped');

La consola muestra:

all dropped
dropped
dropped
dropped

¿Cuál es la forma más sencilla de asegurarseall dropped ¿Se imprimirá después de que se hayan retirado todas las colecciones? Cualquier tercero puede ser utilizado para simplificar el código.