为多个Db呼叫动态延迟创建$ Q.

时间:2015-12-11 20:37:10

标签: angularjs promise q deferred

这是一个简化的例子,但是假设我有一个数组,我需要为某个数组中的每个项目进行数据库调用。阵列的长度各不相同。我在for循环中进行调用,我只是将id传递给调用。

我需要等到所有电话都返回。我该如何完成这项工作?

我的想法:调用本身就是承诺,所以理想情况下,我只会为那些调用promises创建一个$ q.all,但是我不会将这些调用中的任何一个赋值变量,所以我基本上不能把它们放到在$ q全部。我正在考虑为所有这些承诺生成一个新的延迟对象,但我无法弄清楚如何完成这个的细节,因为我需要通过数字或其他东西识别每个调用。

我不希望以任何方式得到全面的答案,只是一般方法。

1 个答案:

答案 0 :(得分:3)

// you have an array of numbers
var array = [1, 2, 3, 4, 5];

// let's create an array of promises: each number has its 
// corresponding promise, created by calling the DB with that number
var promises = array.map(function(number) {
    return callDb(number);
});
// so now you have an array of promises

$q.all(promises).then(function(results) {
    // so now, you have an array of promise results
});