我想一个接一个地执行一系列微风查询。在所有查询完成执行后,我正在使用Q.all执行操作。
var promises = [];
promises.push(datacontext.breezeQuery(config.breezeEntity.Product));
promises.push(datacontext.breezeQuery(config.breezeEntity.Client));
上面提到的breezeQuery函数返回多个promise我不希望第二个查询执行,直到第一个查询的所有promise都被解析。但我发现在使用Q.all(promises)时,第二个查询在第一个查询的第一个promise被解析时开始执行。
如果第一个查询中的所有promise(Promise1和Promise2)都已解析,我怎样才能确保第二个查询不会开始执行。
dc.breezeQuery = function(entity){
return Promise1().then(function(){
return Promise2().then(function(){
});
});
};
答案 0 :(得分:3)
听起来你想要按顺序执行一系列查询。
试试这个:
var queries = ..., // an array of breeze EntityQuery objects
entityManager = ..., // a breeze EntityManager
promise = Q.resolve();
// chain the queries together.
queries.forEach(function(query) {
promise = promise.then(function() { return entityManager.executeQuery(query); });
});
promise.then(function() { console.log('all queries executed!'); });
答案 1 :(得分:3)
你应该可以使用Q.all。这样的事情。
var promises = arrayOfQueries.map(function(q) {
return entityManager.executeQuery(q);
});
return Q.all(promises).then(function() {
return entityManager.executeQuery(query2);
});