[英]async.series with mongoose
var mongoose = require('mongoose');
var mongoDB = "mongodb://jananton:password1@ds020168.mlab.com:20168/test_database";
var User = require('./models/User.js');
var async = require('async');
function establishConnection() {
mongoose.connect(mongoDB, {
useNewUrlParser: true
}).then(
() => {
console.log("Connection successful")
},
(err) => {
console.log("Warning!" + err)
}
);
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
}
let users = [];
function createUser(user_name, user_status, user_position) {
var newUser = new User({
Name: user_name,
_id: new mongoose.Types.ObjectId(),
Status: user_status,
Position: user_position
});
newUser.save((err) => {
if (err) {
console.log(err);
}
});
console.log(newUser.Name);
users.push(newUser);
};
//Call both functions, starting with establishConnection
async.series([
establishConnection,
createUser("Andy", "Administrator", "Whatever"),
],
function(err, res) {
mongoose.connection.close();
})
在上面的代碼中,我只是通過EstablishmentConnection()方法連接到在mLab上托管的MongoDB數據庫。 第二個函數createUser創建一個文檔並將其保存到數據庫中。 然后從async.series()函數內部調用這兩個函數,控制台輸出為
Andy
Connection successful
我不明白為什么首先輸出Andy ,然后才記錄連接成功 ,因為buildConnection之前位於createUser()之前。 此外,貓鼬不會關閉連接(請參見async.series函數的回調函數)。 有人可以解釋我為什么嗎?
因此,您需要更正async.series的用法。 async.series要求每個函數在執行完成后都調用回調函數,因此該系列可以正常工作。
async.series([
function(callback) {
// do some stuff ...
callback(null, 'one');
},
function(callback) {
// do some more stuff ...
callback(null, 'two');
}
],
// optional callback
function(err, results) {
// results is now equal to ['one', 'two']
});
因此,在您的情況下,您需要這樣做,
var mongoose = require('mongoose');
var mongoDB =
"mongodb://jananton:password1@ds020168.mlab.com:20168/test_database";
var User = require('./models/User.js');
var async = require('async');
function establishConnection(callback) {
mongoose.connect(mongoDB, {
useNewUrlParser: true
}).then(
() => {
console.log("Connection successful")
callback(null, "Connection successful");
},
(err) => {
console.log("Warning!" + err)
callback(err);
}
);
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
}
let users = [];
function createUser(user_name, user_status, user_position, callback) {
var newUser = new User({
Name: user_name,
_id: new mongoose.Types.ObjectId(),
Status: user_status,
Position: user_position
});
newUser.save((err) => {
if (err) {
console.log(err);
return callback(err);
}
});
console.log(newUser.Name);
users.push(newUser);
return callback(null, newUser);
};
//Call both functions, starting with establishConnection
async.series([
establishConnection,
createUser("Andy", "Administrator", "Whatever", callback),
],
function(err, res) {
mongoose.connection.close();
})
希望這對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.