2016-11-05 3 views
0

Я следующий яваскрипт кода: -Процесс запрос HTTP GET полностью, прежде чем нажать событие

$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 получать запросы. Они получают данные и обрабатывают их и сохраняют в переменных $ scope. Я хочу, чтобы этот запрос был выполнен до того, как я инициирую событие click, как указано выше. Я выполнил обещания в обеих функциях. Но клик даже заканчивается первым, а затем http-запросы завершены. Как я могу достичь вышеуказанного требования?

+0

Вы должны добавить определения функций 'getActiveBill' и' getBillDetails'. Ключ должен регистрировать функцию, которая запускает щелчок, который будет выполнен, когда есть ответ. Вы сможете это сделать, манипулируя этими двумя функциями, которые делают запросы. – toraman

ответ

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'); 
    }); 

В вашем примере вы вызываете асинхронные функции, но не ждать их, чтобы закончить, это решает ее.

+0

, но функция 'getActiveBill' возвращает объект обещания. Также вы уверены, что это будет ждать 'getBillDetails' для завершения запроса? Я думаю, что 'getBillDetails' также должен вернуть объект обещания, а' then' должен быть запущен следующим образом: 'return $ scope.getBillDetails (bill_id). Then (function() {/ * trigger thingy */ }) ; ' – toraman

+1

Во-первых, он написал, что они оба возвращают обещания. И то, что я предлагаю, - это то, что я написал, когда обещание возвращает другое обещание, и оно ждет следующего обещания. поэтому я написал getActiveBill = (wait-to-prom) => getBillDetails = (wait-to-prom) => do stuff – Nayish

+0

Вы абсолютно правы. Извините, я не видел, чтобы он упоминал обещания. Также вы правы в том, как обещания будут работать. Я не знаю, что я думал – toraman

Смежные вопросы