我在Node.js(Express)和MongoDB(mongooseJS)工作。我想创建异步函数(一个接一个,按正确的顺序查询DB);
问题是:如何创建可变数量的async.series函数,如下所示:
var supply = [0];
async.series([
function(callback) {
Model.find({ color: user.color[supply] }).exec(callback);
},
],function(err, results){
res.send('Chosen colors: ' + results);
});
如果 - 让我们说 - 变量供应= [0,1,2],
然后回调函数将增加三倍,其中0,1和2放在那里:
var supply = [0, 1, 2];
async.series([
function(callback) {
Model.find({ color: user.color[supply] }).exec(callback); // supply = 0
},
function(callback) {
Model.find({ color: user.color[supply] }).exec(callback); // supply = 1
},
function(callback) {
Model.find({ color: user.color[supply] }).exec(callback); // supply = 2
},
],function(err, results){
res.send('Chosen colors: ' + results);
});
换句话说,我怎么能循环这个片段
function(callback) {
Model.find({ color: user.color[supply] }).exec(callback);
},
因此,根据某些变量,函数的数量会在这里吗?
干杯!
麦克
答案 0 :(得分:3)
您可以使用async.mapSeries()
,因为它旨在迭代数组。例如:
var supply = [0];
async.mapSeries(supply, function(val, callback) {
Model.find({ color: user.color[val] }).exec(callback);
}, function(err, results) {
if (err) throw err;
// all done!
console.dir(results);
});
这假设.exec()
调用回调,使得错误是第一个,值是第二个。