我有以下javascript代码: -
$scope.fav_bill_details=function (id1,id2,bill_id) {
document.getElementById(id2).style.display="none";
$scope.getActiveBill();
document.getElementById(id1).style.display="block";
$scope.getBillDetails(bill_id);
$timeout(function(){
var btn=angular.element(document.getElementById(bill_id));
angular.element(document.getElementById(btn.id)).trigger('click');
});
};
从上面可以看到上面有两个函数调用: - $scope.getActiveBill();
和$scope.getBillDetails(bill_id);
,这两个函数都有http get请求。他们获取数据并对其进行处理并将其存储在$ scope变量中。我想要的是在触发上面的点击事件之前完成这些请求。我已经在两个函数中实现了promises。但点击甚至先完成,然后完成http请求。我怎样才能达到上述要求?
答案 0 :(得分:1)
您需要使用承诺,例如:
$scope.fav_bill_details=function (id1,id2,bill_id) {
document.getElementById(id2).style.display="none";
$scope.getActiveBill().then(function() {
document.getElementById(id1).style.display="block";
return $scope.getBillDetails(bill_id);
}).then(function () {
var btn=angular.element(document.getElementById(bill_id));
angular.element(document.getElementById(btn.id)).trigger('click');
});
在您的示例中,您调用异步函数但不等待它们完成,这解决了它。