Parallel processing 使用.then内部异步并行
我试图在async.parallel中运行两个sequelize查询,这样我就可以在回调中将它们传递给表单(尽管这里没有显示表单集成)。当我运行它时,它返回results.animals,但是results.zones是未定义的 我可以从日志中看到,在async.parallel回调函数运行之后,它正在运行Zone.findAll。如果我只在区域中执行一个sequelize调用,那么它就可以工作,但在查询state.findOne和Zone.findAll时就不行了 知道为什么会这样吗?我以为async.parallel应该等到两者都完成后再返回Parallel processing 使用.then内部异步并行,parallel-processing,sequelize.js,async.js,Parallel Processing,Sequelize.js,Async.js,我试图在async.parallel中运行两个sequelize查询,这样我就可以在回调中将它们传递给表单(尽管这里没有显示表单集成)。当我运行它时,它返回results.animals,但是results.zones是未定义的 我可以从日志中看到,在async.parallel回调函数运行之后,它正在运行Zone.findAll。如果我只在区域中执行一个sequelize调用,那么它就可以工作,但在查询state.findOne和Zone.findAll时就不行了 知道为什么会这样吗?我以为a
async.parallel({
animals: function(callback) {
Animal.findAll().then(function(animalResult){
console.log("animals result: " + JSON.stringify(animalResult))
callback(null, animalResult);
})
},
zones: function(callback){
State.findOne({
where : { abbr : req.query.state.toUpperCase() }
}).then(function(state) {
console.log("State ID: " + JSON.stringify(state['id']))
Zone.findAll({
attributes: ['name'],
where: { StateId : state['id']}
})
}).then(function(zoneResult) {
console.log("zones result: " + JSON.stringify(zoneResult));
callback(null, zoneResult);
});
}
}, function(err, results) {
if (err) { return next(err); }
console.log("Results in callback: " + JSON.stringify(results));
res.send(results)
}
);
如果您的目标是在表单中同时提供两个(或可能更多)查询的结果,则可以按以下方式使用Promise.join:
var Sequelize = require('sequelize');
var sequelize = new Sequelize(dbName, username, ...);
var getAnimals = function(){
return Animal.findAll({ where: { name: 'xyz' }});
}
var getZones = function(){
return State.findOne({ where: { abbr : req.query.state.toUpperCase() }})
.then(function(state){
return Zone.findAll({ where: { StateId : state['id']} }});
});
}
// now use Promise.join to execute the 2 functions concurrently and
// have their result in the handler function
sequelize.Promise.join(getAnimals(), getZones(), function(animals, zones){
// animals and zones are sequelize instances
console.log(animals.someProperty);
console.log(zones.someProperty);
res.json({ animals: animals, zones: zones });
});
看看这个: