Javascript 将猫鼬种子脚本变成承诺

Javascript 将猫鼬种子脚本变成承诺,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我一直在试图解决一个我发现自己在很多时候都遇到过的场景:播种MongoDB数据库。所以我得到了下面的脚本,我想把它变成一个承诺,最好使用ES6,但如果是这样的话,我会用一只蓝鸟作为答案。 这是我在关闭数据库之前使用setTimeout为写操作留出时间得到的结果: //导入到`bookshelf`db的连接。 var bookshelfConn=require('./数据库'); //导入我们将用于写入数据库的Mongoose模型。 var账簿=要求('./模型/账簿'); //导入数据以填充数

我一直在试图解决一个我发现自己在很多时候都遇到过的场景:播种MongoDB数据库。所以我得到了下面的脚本,我想把它变成一个承诺,最好使用ES6,但如果是这样的话,我会用一只蓝鸟作为答案。 这是我在关闭数据库之前使用
setTimeout
为写操作留出时间得到的结果:

//导入到`bookshelf`db的连接。
var bookshelfConn=require('./数据库');
//导入我们将用于写入数据库的Mongoose模型。
var账簿=要求('./模型/账簿');
//导入数据以填充数据库。
var账簿=要求('./数据集');
//连接就绪后,播放音乐!
书架开启('open',函数(){
dropDb(seedDb,closeDb);
});
函数dropDb(cb1、cb2){
bookshelfConn.db.dropDatabase();
log('Database dropped!');
cb1(cb2);
}
函数seedDb(cb){
console.time('Seeding time');//对种子过程进行基准测试。
//警告!IO运行缓慢。
books.forEach(函数(book){
新书(书)。保存(功能(错误){
if(err)console.log('Oopsie!',err);
});
console.log('seaking:',book);
});
console.timeEnd(‘播种时间’);//对种子进程进行基准测试。
cb();
}
函数closeDb(){
setTimeout(函数(){
书架关闭(功能(){
log('Mongoose连接关闭!');
});
},1000);//延迟关闭连接,以便有足够的时间播种!

}
请尝试通过

新承诺
创建新承诺。传入的函数将接收函数resolve和reject作为其参数,可以调用这些参数来确定所创建承诺的命运

Promise.all
在您希望等待多个承诺完成时非常有用

var bookOps = [];

books.forEach(function (book) {
    bookOps.push(saveBookAsync(book));
});

Promise.all(bookOps).then(function() {
   bookshelfConn.close(function () {
      console.log('Mongoose connection closed!');
    });
});

function saveBookAsync(book) {
    return new Promise(function(resolve, reject) {
        new Book(book).save(function(err) {
            if (err)
                reject(err);
            else
                resolve();
        })
    });
}

谢谢,它工作完美无瑕。我根本不知道什么是承诺