AngularJS оценка отложенных объектов

У меня есть простое приложение, которое возвращает объекты из REST API и привязывает их к переменной области видимости. Это работает нормально, но если я попытаюсь выполнить какую-либо работу с объектами, возвращенными из обещания $resource, объекты не будут определены.

Я собрал этот plunkr, чтобы воспроизвести поведение с помощью службы $q. Первая часть привязывает простой массив к области видимости, вторая получает тот же массив через отложенный объект. Третий снова получает массив через отложенный объект, а затем пытается применить некоторую простую логику к возвращаемому объекту. К сожалению, возвращаемый объект не имеет атрибута «длина». Ясно, что я что-то упустил, предположительно какое-то использование $scope.$apply, но мне и там не повезло.

Что я делаю не так?


person user3285982    schedule 13.02.2014    source источник


Ответы (2)


Вам нужно использовать then с вашим обещанием.

asyncInit().then(function(data){
  $scope.deferredPersons = data;
});

С этого момента у вас есть доступ к вашим данным, как обычно, и вы можете вызывать их .length. Обратите внимание: вы всегда должны обрабатывать ошибки при использовании промисов, иначе отладка может стать сложной.

person bioball    schedule 13.02.2014
comment
Спасибо за это. Измененный plunkr теперь имеет элементарную обработку ошибок и показывает реальную работу, проделанную с отложенным объектом. - person user3285982; 13.02.2014

Если вы хотите использовать длину, используйте deferredPersons.then.length

if (deferredPersons.then.length > 0)

plunkr

person sayam    schedule 13.02.2014