我想在里面用mongoose创建一个同步查询。
我的脚本是:
async.parallel(
{
team: function(callback){
Object.keys(myobj[0]).each(function(name){
db.model( 'myCollection', myCollection, myCollection ).find({ profile: name }, function( err, profile ){
if (err)
return callback(err);
callback(null, profile);
});
});
},
},
function(e, r){
console.log(r.team);
// can use r.team
}
);
但我有这个错误
错误:已经调用了回调。
答案 0 :(得分:0)
team: function(callback){
Object.keys(myobj[0]).each(function(name){
db.model( 'myCollection', myCollection, myCollection ).find({ profile: name }, function( err, profile ){
if (err)
return callback(err);
callback(null, profile);
});
});
},
它不会起作用,因为只要在forEach中找到第一个结果就会执行回调(each
无效的javascript BTW)。检查async.map的异步文档或修改mongoose查询以查找与配置文件数组匹配的所有文档,因此您只执行1个查询并返回一组配置文件。
答案 1 :(得分:0)
您需要创建一个函数数组并使用clojure来保持每个数组元素。
function createfunc(obj) {
var name = obj;
return function(callback) {
db.model( 'myCollection', myCollection, myCollection ).find({ profile: name }, function( err, profile ){
if (err)
return callback(err);
callback(null, profile);
});
}
}
var funcs = [];
Object.keys(myobj[0]).forEach(function(name) { funcs.push(createfunc(name)); });
async.parallel(funcs, function(e, r) { console.log(r.team); });