【发布时间】:2015-03-28 05:13:49
【问题描述】:
我有这段代码,我想运行所有数据库插入,然后在脚本结束时断开与数据库的连接。问题是我需要在循环结束后执行断开回调,但它是不确定的。所以我需要为每个循环创建一个函数,然后只有在所有这些函数完成后,调用该函数以断开与 mongoose/mongoDB 的连接。
有人看到我在这段代码中遇到的问题吗?
//这段代码很接近,但不完全,因为它会在执行很多插入/保存之前断开与 mongo 的连接
var mongoose = require('mongoose')
, Admin = mongoose.mongo.Admin;
var UserModel = require('../models/UserModel');
UserModel.registerSchema(mongoose);
var fs = require('fs');
var parsedJSON = JSON.parse(fs.readFileSync('../dummy_data/dummy_user_data', 'utf8'));
var system_db = mongoose.connect('mongodb://localhost:27017/local_dev_db');
function insertUsers(callback){
parsedJSON.forEach(function (item, index) {
var User = UserModel.getNewUser(system_db);
var user = new User({
username: item.username,
password: item.password,
address: item.address,
phone: item.phone,
email: item.email,
gender: item.gender,
about: item.about,
latitude: item.latitude,
longitude: item.longitude
});
user.save(function (err, result) {
if (err) {
console.log("error in player save method:", err);
}
console.log(index);
if (result) {
//console.log('Added!', result);
}
});
});
callback();
}
function disconnect(){
mongoose.disconnect();
mongoose.connection
.close(function () {
console
.log('Mongoose connection disconnected');
process.exit(0);
});
}
insertUsers(disconnect);
所以解决方案是使用 async.parallel 库,只有在所有函数完成后,才调用最终回调函数。但是,我如何以编程方式执行此操作,而不是将一组已知函数放入 async.parallel 代码块中,我需要将未知数量的函数放入 aysnc.parallel 代码块中。看到了吗?
【问题讨论】:
标签: javascript node.js mongodb asynchronous