【问题标题】:Create $Q Deferred Dynamically for Multiple Db Calls为多个数据库调用动态创建 $Q Deferred
【发布时间】:2015-12-11 20:37:09
【问题描述】:

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

我需要等到所有电话都返回。我该怎么做呢?

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

我不希望有任何全面的答案,只是一般的方法。

【问题讨论】:

    标签: angularjs promise q deferred


    【解决方案1】:
    // 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
    });
    

    【讨论】:

    • 这正是我所需要的,我把它弄得太复杂了,非常感谢。
    • 如果callDb 真的接受一个(数字)参数,那么var promises = array.map(callDb);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多