为多个 Db 调用动态创建 $Q 延迟

Create $Q Deferred Dynamically for Multiple Db Calls

这是一个简化的示例,但假设我有一个数字数组,出于某种原因我需要对该数组中的每个项目进行数据库调用。数组的长度不同。我在 for 循环中进行调用,我只是将 id 传递给调用。

我需要等到所有电话 return。我该怎么做才能做到这一点?

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

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

// 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
});