I faced the same issue in my initial days.
There are many ways of doing it exactly as suggested here.
You need to know below two things before exploring:
1. JavaScript синхронен
Synchronous Example[Flow in sequence]:
console.log('1')
console.log('2')
console.log('3')
Журналы 1 2 3.
Пример совершения звонков в сервис
1. $http.get(aUrl).success(function(data) { console.log('1.any time response returns') });
2. $http.get(bUrl).success(function(data) { console.log('2.mummy returns')};
Так как однопоточный javascript сначала вызовет ваш код ниже с помощью $ http.get (aUrl), который переходит по URL и обрабатывает данные из фона.
- $ http.get (aUrl) .success (function (data) {console.log ('1.any time response возвращает')});
Но главное, на что нужно обратить внимание, это то, что $ http.get (aUrl), запрошенный выше, не ждет, пока данные будут возвращены в случае успеха / ошибки. Он переходит к следующему запросу $ http.get (bUrl), и мы просто не можем предсказать, какой ответ придет раньше.
- $ http.get (bUrl) .success (function (data) {console.log ('2.mummy Return'))}
Вывод может быть либо
1. любой ответ времени возвращается
2. Мумия возвращается
or
2. Мумия возвращается
1. любой ответ времени возвращается
Итак, чтобы преодолеть эту ситуацию, мы выполняем асинхронные операции различными способами.
2. Асинхронные вызовы
$http.get(aUrl)
.then(function(response){
console.log('inside the first then response');
console.log(response.data);
//executing the second request after we get the first request
//and returns the **outputResponse** which is captured in the next **then** block
return $http.get(bUrl);
})
.then(function(**outputResponse** ){
console.log('outputResponse generated from to the second bUrl');
//you can call init() here
});
Выше кода достаточно для вашего требования.
Нажмите для получения дополнительной информации, используя $ q в будущем
Нажмите здесь, чтобы узнать, почему использовать вместо успеха.