반응형
그럼 .는 왜 함수가 아닌가요?
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
반응형
'programing' 카테고리의 다른 글
사용자 지정 쿼리로 가져온 wordpress의 post_content에서 모든 시각적 작곡가 숏코드/태그를 제거하는 방법 (0) | 2023.10.28 |
---|---|
브리지 네트워크에서 컨테이너의 IP를 가져오는 방법 (0) | 2023.10.28 |
Mysql에서 Varchar를 텍스트로 마이그레이션 (0) | 2023.10.28 |
Gmail에서 메일 AJAX 요청 가로채기 (0) | 2023.10.28 |
응용 프로그램 컨텍스트이게 뭐야? (0) | 2023.10.28 |