假设我有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();
}
答案 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()