$ Кв. все обещания (Access-Control-Allow-Origin) - PullRequest
0 голосов
/ 10 мая 2018

Обещания позволяют программе выполняться асинхронно и экономить время, поскольку она извлекает информацию из обоих URL-адресов одновременно.

Поскольку обещания выполняются асинхронно, для функции $ q.all (promises) верно, чтоresultList [0] всегда содержит информацию из 1.json, а resultList [1] содержит информацию из 2.json?Promises.push () может не иметь данных из 1.json сначала верно?Поскольку обещание выполняется асинхронно, оно может иметь данные только от 2.json до 1.json.

После запуска страницы (с использованием Promises) на другом сервере выдается ошибка «Origin» www.dns 'не разрешено Access-Control-Allow-Origin. "и «XMLHttpRequest не может загрузить« a.json »из-за проверок контроля доступа», поскольку метод Gquery Jquery может использовать JSONP для устранения ошибки.Но есть ли способ, который можно решить в обещаниях?

var promises = [];
var loadingJson = function(url){
    var defer = $q.defer();
    $http.get(url).then(function(results){
        defer.resolve(results);
    }, function(err){
       defer.reject(err);
    });

    return defer.promise;
};

promises.push(loadingJson('example.com/1.json'));
promises.push(loadingJson('example.com/2.json'));

$q.all(promises).then(function(resultList){
  // Your hanadling here, resultList contains the results of both API calls.
}, function(errList){
 // Your error handling here.
});

1 Ответ

0 голосов
/ 10 мая 2018

Краткий ответ: ДА .


Из документации $q.all (выделено мое):

Возвращает одно обещание, которое будет разрешено с помощью массива / хэша значений, каждое значение, соответствующее обещанию с тем же индексом / ключом в массиве / хэше обещаний. Если любое из обещаний разрешается с помощьюотклонение, это результирующее обещание будет отклонено с тем же значением отклонения.

Короче говоря, результат $q.all будет поддерживать порядок исходного списка, независимо от порядка, в котором каждое обещание индивидуальнорешает.

...