AngularJs在完成2个不同的https请求时调用函数

时间:2013-12-30 20:27:25

标签: javascript angularjs asynchronous angularjs-scope

假设我有2个http请求,我希望两个都是异步调用但我希望它们在我渲染我的视图之前完成,我如何调整2个单独的调用来调用一个函数。 call3和call4仍然在后台运行,但我不想等待它们完成。

我添加了一个示例代码:

var call1_done = false;
var call2_done = false;
var call3_done = false;
var call4_done = false;

API.get_client().then(function(){
    call1_done = true;
});

API.get_all_clients().then(function(){
    call2_done = true;
});

// ignore call3 and call4 they can continue in the background
if (call1_done && call2_done)
{
   render_the_page();
}

1 个答案:

答案 0 :(得分:1)

如果您对使用$q.all([])感兴趣,我会尝试使用$watch

 $scope.calls = {
   call1_done: false,
   call2_done: false
 };



API.get_client().then(function(){
    $scope.calls.call1_done = true;
});

API.get_all_clients().then(function(){
    $scope.calls.call2_done = true;
});

/* 2 and 4 async tasks are running ..... */

 $scope.$watch(function () {
    return $scope.calls;
},
function (newValue, oldValue) {
    if(newValue.call1_done && newValue.call2_done ){
      render_the_page();
     }
}, true);

这里我们监听一个存储两个标志的对象,如果两个标志都转向true - >火render_the_page()