ngresource получить ошибку при доступе к свойствам ресурса

0

У меня есть простая фабрика, ниже которой запрашивается объект json с некоторой информацией о местоположении. Запросы работают, я вижу, что данные находятся в объекте. Но почему-то проблема с прицелом. Я не могу получить доступ к свойствам объекта location, даже если я знаю, что у объекта есть свойство и правильный массив.

Вы можете увидеть в фрагменте кода ниже (если вы посмотрите на комментарии), что я не могу получить доступ к некоторому значению объекта при попытке вывести его на консоль.

Любая идея о том, что может быть проблемой?

    .factory('Spots', function(){
        return{
            all: function($resource){
                var locations;
                var Locations =  $resource('http://localhost\\:3000/locationsd/');
                locations = Locations.get(function(){
                    console.log(locations.results[0].obj.name); // THIS WORKS -> gives me the name of the location
                });
                console.log(locations); // THIS WORKS -> log an object with a result array, etc.
                console.log(locations.results[0].obj.name); // THIS DOESNT WORK -> TypeError: Cannot read property '0' of undefined
                return locations;
            }
        }
    })
Теги:
geojson

1 ответ

1

Это связано с тем, что он является асинхронным. Чтобы правильно использовать $ resource в сервисе, вы должны использовать обещания.

.factory('Spots', function(){
        return{
            all: function($resource){
                var Locations =  $resource('http://localhost\\:3000/locationsd/');
                return Locations.get().$promise.then(function(res){
                    return res;
                });
            }
        }
    })

Затем при вызове функции с вашего контроллера:

Spots.all().then(function(res){ 
   //do stuff with res here 
})

Если вы не знаете, какие обещания, читайте о них здесь: https://docs.angularjs.org/api/ng/service/ $ q

Общая идея - это ресурс, обещающий, что он закончится в конце концов, и когда это будет сделано, он вызовет функцию, которую вы передадите в ее then().

  • 0
    Зачем использовать $ обещание? Разве функция обратного вызова .get не должна вызываться только тогда, когда сервер возвращает данные? И я получаю эту ошибку: TypeError: Невозможно прочитать свойство 'then' из undefined Очевидно, что где-то есть ошибка, но я не могу ее выяснить. Тем более что console.log (Locations.get ()) показывает объект. Так почему я не могу получить доступ к ресурсу обещания?

Ещё вопросы

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