AngularJs - 同时进行多次服务调用?

时间:2014-05-27 14:36:03

标签: javascript angularjs asynchronous twitter-bootstrap-3

我有一个非常大的搜索表单,其中包含必须从Web服务填充的8个选择控件。我正在努力解决如何使用AngularJs最好地实现这一目标。我是否打电话给一个,然后将下一个放在'then'子句中,然后在'then'子句中加上ext,依此类推?只是看着这个让我觉得必须有一个更好的,格式正确的方法来做到这一点,我只是因为我是Angular的新手...

为了说明这个问题,我有以下HTML(整个表单的一部分):

<div class="row">
    <div class="col-md-12">
        <div class="col-md-2">
            <label for="ddlRace">Race</label>
            <select id="ddlRace" class="form-control"></select>
        </div>
        <div class="col-md-2">
            <label for="ddlHairColor">Hair Color</label>
            <select id="ddlHairColor" class="form-control">
            </select>
        </div>
        <div class="col-md-2">
            <label for="ddlEyeColor">Eye Color</label>
            <select id="ddlEyeColor" class="form-control">
            </select>
        </div>
        <div class="col-md-2">
            <input type="text" id="tbHeight" class="form-control">
        </div>
        <div class="col-md-2">
            <input type="text" id="tbWeight" class="form-control">
        </div>
    </div>
</div>
<div class="row">
    <div class="col-md-3">
        <label for="tbStreetNumber">House Number</label>
        <input type="text" id="tbStreetNumber" class="form-control">
    </div>
    <div class="col-md-2">
        <label for="ddlStreetPrefix">Prefix</label>
        <select id="ddlStreetPrefix" class="form-control">
            <option value="">Prefix</option>
        </select>
    </div>
    <div class="col-md-5">
        <label for="tbStreetName">Street Name</label>
        <input type="text" id="tbStreetName" class="form-control">
    </div>
    <div class="col-md-2">
        <label for="ddlStreetSuffix">Suffix</label>
        <select id="ddlStreetSuffix" class="form-control">
            <option value="">Suffix</option>
        </select>
    </div>
</div>

我必须在服务电话中填充种族,头发颜色,眼睛颜色,街道前缀和街道后缀。我有一个工厂设置调用每个,但我需要在表单最初加载时运行所有这些,所以我可以填充字段。那么使用deferred / promise API执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

一个接一个地调用每个承诺,而不是将它们与'then'子句链接在一起。否则,如果你这样做,他们将连续运行 - 这不是你想要的。

当所有承诺都得到解决或出现问题时,使用$ q.all注册成功/错误回调:

var p1 = promise1();
var p2 = promise2();
var p3 = promise3();

$q.all([p1, p2, p3])
       .then(
             function() { /*success*/ },
             function() { /*error */ }
        );