programing

그럼 .는 왜 함수가 아닌가요?

muds 2023. 10. 28. 08:19
반응형

그럼 .는 왜 함수가 아닌가요?

service.js

.factory('EventService', function ($http, $cordovaSQLite) {
    return {
        //some code here..
        populateData: function (data) {
            var items = [];
            for (i = 0; i < data.length; i++) {
                items.push(data[i]);
            }
            return items;
        }
    }
})

controller.js

.controller('NearCtrl', function ($scope, $http, $cordovaSQLite, EventService) {
    EventService.getDataFromDB().then(function (result) {
        if (result.length > 0) {
            EventService.populateData(result).then(function (items) {
                $scope.items = items;
            })
        } else {
            EventService.getDataFromApi().then(function () {
                EventService.getDataFromDB().then(function (result) {
                    EventService.populateData(result).then(function (items) {
                        $scope.items = items;
                    })
                })
            })
        }
    });
})

이 코드를 실행하려고 하면 "TypeError: EventService.pulateData(...). 그러면 not function"이라는 메시지가 나타납니다.

내가 뭘 잘못하고 있는 거지?

그 서비스는 약속을 돌려줘야 합니다. 물건을 돌려주는 것이 아닙니다.

populateData: function(data) {
    var deferred = $q.defer();
    var items = [];
    for (i = 0; i < data.length; i++) {
        items.push(data[i]);
    }
    deferred.resolve(items);
    return deferred.promise;
}

당신이 할 수 있기 때문에 당신은 이것이 필요하지 않을지도 모릅니다.

var items = EventService.populateData(result);
//Do something with items here

어떤 일을 비동기적으로 할 때는 보통 약속이 사용됩니다.API를 호출하고 응답을 기다리는 것과 같습니다.이 경우 응답을 완료하는 데 몇 초가 소요된 후 .then 함수가 호출될 수 있습니다.당신의 경우 그 기능을 약속한다면 거의 즉시 호출될 것입니다.

편집: 여기 $q Documentation Angular 링크가 있습니다.JS: API: $q

약속이 있는 내용을 반환하거나 전화 코드만 변경합니다.

populateData: return $http.get("www");

아니면

EventService.getDataFromApi().then(function () {
    EventService.getDataFromDB().then(function (result) {
        var response = EventService.populateData(result);
        $scope.items = response;
    });
});

저도 같은 문제가 있습니다. 제 기기는 m1 맥이고, 시작하기 위해 npm 교체사로 고쳤습니다.

언급URL : https://stackoverflow.com/questions/31707822/why-is-then-not-a-function

반응형