Mic*_*ael 4 javascript asynchronous mongoose mongodb node.js
我acync.series在我的node.js程序上使用.我试图异步循环使用mongoose集合async.each.这是到目前为止的代码:
var async = require('async');
var mongoose = require('mongoose');
var usersData;
async.series([
function(callback) {
mongoose.connect("mongodb://localhost/****");
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error...'));
db.once('open', function callback() {
console.log('db opened!');
});
callback();
},
function(callback) {
users = mongoose.model('User', new mongoose.Schema({name: String,age: Number}));
users.find(function(err, userFound) {
if (err) {console.log(err);}
usersData = userFound;
});
callback();
},
function(callback) {
async.each(usersData, function(userData, callback) {
some code....
}, callback);
}
])
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我从异步中得到以下错误:
if (!arr.length) {
^
TypeError: Cannot read property 'length' of undefined
Run Code Online (Sandbox Code Playgroud)
什么是异步循环mongoose集合的正确方法
因为async/await将是ES7并且已经通过转换非常受欢迎,这是谷歌搜索Mongoose和async时的最佳结果.
虽然没有回答原来的问题,但我想我会留下这个以供将来参考.
使用本机Promise(注意所有用户并行处理):
const User = mongoose.model('User', new mongoose.Schema({
name: String,
age: Number
}));
function processUsers() {
return mongoose.connect('mongodb://localhost')
.then(function() {
return User.find();
})
.then(function(users) {
const promises = users.map(function(user) {
return // ... some async code using `user`
});
return Promise.all(promises);
});
});
processUsers()
.then(function() {
console.log('Finished');
})
.catch(function(error) {
console.error(error.stack);
});
Run Code Online (Sandbox Code Playgroud)
使用Mongoose的eachAsync每个用户都按顺序处理:
function processUsers() {
return mongoose.connect('mongodb://localhost')
.then(function() {
return User.find().cursor().eachAsync(function(user) {
return // ... some async code using `user`
});
})
});
Run Code Online (Sandbox Code Playgroud)
使用async/await:
async function processUsers() {
await mongoose.connect('mongodb://localhost');
await User.find().cursor().eachAsync(async function(user) {
await // ... some async code using `user`
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |