在Angular中处理多个promise的正确方法

时间:2014-03-19 08:12:36

标签: javascript angularjs promise

多个$ http请求完成后触发函数的正确方法是什么?我有2个选项,但我不确定哪个是正确的。请注意,“完成”,“一”和“两个”之后的日志都已完成。

首先,我只是将所有$ http请求推送到一个数组并使用$q.all(promises).then来触发最终回调,我不记得我在哪里看到这个,但似乎工作正常(可能是因为我的localhost快速处理请求):

var one = $http.get("/request/one/"),
    two = $http.get("/request/two/"),
    promises;

    one.then(function(response){
        console.log('one');
    });

    two.then(function(response){
        console.log('two');
    });

    promises = $q.all([one, two]);

    promises.then(function(){
        console.log('done');
    });

其次,我在一些教程中看到了它,包括https://egghead.io/lessons/angularjs-q-all

var one = $q.defer(),
    two = $q.defer(),
    promises;

    $http.get("/request/one/").then(function(response){
        one.resolve('one');
    });

    $http.get("/request/two/").then(function(response){
        two.resolve('two');
    });

    promises = $q.all([one.promise, two.promise]);

    promises.then(function(result){
        console.log('done');
    });

1 个答案:

答案 0 :(得分:2)

你绝对应该采用第一种方法。第二个创造了两个不必要的承诺。 $http已经返回了承诺,因此无需再使用$q.defer()再创建两个承诺。