Какова цель этого углового кода JS?

0

Может ли кто-нибудь объяснить мне, что делает этот код? Я знаю, что он выбирает страны и подталкивает их к списку, который показан на веб-странице, но почему? Я думаю, что $ scope.countries = service.query() достаточно или это способ избежать асинхронных проблем?

$q.all([$scope.address.$promise, $scope.countrys.$promise]).then(function() {
        if (!$scope.address.country.id) {
            return $q.reject();
        }
        return Country.get({id : $scope.address.country.id}).$promise;
    }).then(function(country) {
        $scope.countrys.push(country);

    });
Теги:
asynchronous
drop-down-menu

2 ответа

5
Лучший ответ

Описания в комментариях кода. Это условно процесс загрузки данных с использованием механизма обещаний. Попробуйте указать свой вопрос более подробно, если вам недостаточно

// if address and countries was loaded (probably from ajax request)
$q.all([$scope.address.$promise, $scope.countrys.$promise]).then(function() {
    // if address doesn't exist reject all actions
    if (!$scope.address.country.id) {
        return $q.reject();
    }
    // otherwise load country based on address field as a promise
    return Country.get({id : $scope.address.country.id}).$promise;
}).then(function(country) {
    // when loading process is finished add country to dataset
    $scope.countrys.push(country);
});

Согласно сервисной документации на $q

$q.all([promise1, promise2,...])

Объединяет несколько обещаний в единое обещание, которое разрешается, когда все вступительные обещания разрешаются.

  • 0
    СПАСИБО! Что делает $ q.all, и кажется, что список стран выдвигается только одной страной, но я думаю, что нет, как-то это работает как петля?
  • 0
    Это не похоже на петлю. В вашем случае просто убедитесь, что $scope.address и $scope.countrys были правильно загружены до начала этой обработки. Смотри мое редактирование
Показать ещё 2 комментария
1

service.query() неизбежно вернет обещание, которое будет устранено после завершения асинхронного вызова. Не имеет смысла устанавливать свойство scope (которое вы, без сомнения, связываете с каким-то списком) с обещанием.

То, что делает код, - это ожидание того, что обещание разрешило, выполнило некоторую логику и установило полученные данные в свойство scope.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню