У меня есть функция для извлечения данных из веб-API и загрузки их в пользовательском интерфейсе.Я использую угловой js с xmlhttprequest для получения данных.Моя функция, как показано ниже.
var testMethod = (resolve,reject)=>{
$scope.responseData = [];
var startCount =0;
var isDataAvaialble = true;
do {
var url = "ur/api/search?start=" +startCount;
$http({
method : 'GET',
url:url,
}).then function successCallback(response){
$scope.data= response.Data;
for (var i =0 ; i<$scope.data.length; i++)
{
// do something
if(condition)
{
$scope.resonseData.push($scope.data[i]);
isDataAvailable = true;
}
else
{
isDataAvailable =false;
break;
}
}
});
startCount ++;
}while(isDataAvailable)
resolve($scope.response);
};
Но так как я использую Promise внутри цикла, цикл выполняется перед обещанием.Вместо этого, если я использую синхронный цикл xmlhttprequest, он работает.
, то есть вместо
var url = "ur/api/search?start=" +startCount;
$http({
method : 'GET',
url:url,
}).then function successCallback(response){
, если я использую
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.send(null);
$scope.data = JSON.parse(xhr.responseText);
, все работает.Но мне не нужно использовать синхронный здесь.
Мне нужно сделать это асинхронно.Мне нужно получить $ scope.responseData в другой функции