2016-11-22 5 views
0

Я делаю мыло звонок в угловую, как показано нижеЗавершение вызова мыла, прежде чем перейти к следующей строке кода

app.factory('service', ['$soap', function ($soap) { 
return { 
    SampleRequest: function (param1,param2) { 
     return $soap.post(url, "SampleRequest", { 
      'Request': { 
       'input1': param1, 
       'input2': param2, 
      }}); 
    } 
} 
}]) 

Я определил его, как показано ниже для вызова веб-сервиса

$rootScope.callSoapService = function() { 
service.SampleRequest("Hello","World").then(function (response) { 
     if (response.Valid == 'Y') { 
      //do something 
     } 
} 
} 

и определил его как этот

function callService() { 
    $rootScope.callSoapService(); 
} 

Теперь мой вопрос, когда я делаю что-то вроде ниже

$rootScope.dosomething = function(){ 
function1(); 
callService(); 
function2(); 
} 

проблема была Функция1 выполняется и возвращает и переходит к следующей строке callService, где она не будет закончить вызов, но выполняет следующую строку, которая была function2(), а затем, наконец, выполняет запрос на мыло. Есть ли способ заставить его выполнить последовательность?

+0

Yup, это асинхронный код. Невозможно заблокировать его (к счастью), поэтому вам нужно научиться использовать обещания. Попробуйте найти здесь http://stackoverflow.com/a/17522010/854556 –

+0

Возможный дубликат [Как получить Javascript для ожидания асинхронного вызова перед продолжением?] (Http://stackoverflow.com/questions/17521920/how- в-получить Javascript-к-ждать-в-ан-асинхронной-вызов-перед тем, протекающей) –

ответ

0

Запросы являются асинхронными, вы должны работать с обещаниями, когда вам нужно синхронизировать работу. Предполагая, что callService возвращает «обещание», вы можете просто:

$rootScope.dosomething = function(){ 
    function1(); 
    callService().then(() => { 
     function2(); 
    }); 
} 
Смежные вопросы