Q.all解决一系列承诺

时间:2015-02-09 15:39:06

标签: javascript promise breeze q

我想一个接一个地执行一系列微风查询。在所有查询完成执行后,我正在使用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(){
    });
  });
};

2 个答案:

答案 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);
});