2016-09-23 3 views
-1

에서 실행되지 않습니다, 나는 각 사용자 정의 서비스를 호출하는 기능을 가지고기능은 내 현재 프로젝트에서 JS

var vm = this; 
vm.itemname = ''; 

function getItems(){ 
    var result = myservice.getFromLibrary(); 
    result.then(function(data){ 
    vm.dataSet = data; 
    }); 
} 

내가 데이터를 저장하는 또 다른 기능이 변수에 데이터를 할당 이 준 getItem() 함수를 저장 취득 후

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem); 
    getItems(); 
}; 

을 다음하지만 vm.addItem가 호출 될 때, 그것은 getItems 기능의 항목을 검색하지 않기 때문에,라고하지만 나에게 정의되지 않은 출력을 제공한다

s은 당신이 함수의 이름없는 -

어떤 도움은 매우이 문제

+0

항목을 추가해도 아무 것도 반환되지 않으므로 정의되지 않아야합니다. –

+0

당신이 게시 한 코드와 함께 getItems! == getitem 문제 외에도 myservice.getFromLibrary();가 분명히 비동기 적이기 때문에 'vm.dataSet'은 "some time after" 'VM 에의 호출.addItem' –

답변

1

먼저 함수 이름을 getItem이라고 부르면 getItems이되어야합니다.

오타의 경우 서비스에서 약속이 반환 된 후 getItems 메서드를 호출하십시오.

콜백에서 오류 기능을 추가 할 수도 있습니다.

promise(then and error)을 사용하면 코드의 다음 줄은 서비스에서 응답이 오는 경우에만 실행됩니다.

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem) 
    .then(function(response){ 
     getItem(); 
    } 
    function error(response) 
    { 
    console.log('error') 
    }); 
}; 
+0

하이 @mujahid, 이것을 사용해 보셨습니까? – Sravan

+0

안녕하세요 @ 스라반, 답장을 보내 주셔서 감사합니다. 예, 작동합니다. 문제는 서비스 파일에 있었는데 이전에이 방법을 시도했지만'then'이 정의되어 있지 않다는 오류가있었습니다.하지만 서비스 파일을 체크인했을 때 약속을 반환하지 않았을 때 문제도 해결했습니다. 이제 완벽하게 작동합니다. 대답을 주셔서 감사합니다 – Mujahid

0

함수 이름이 getItems()하지만 당신이 addItem에서 호출 할 때, 당신은 정의되지 않은 기능 getItem()를 호출을 해결하기 위해 이해 될 것이다 전화하려고합니다.

+0

그것을 지적 해 주셔서 감사합니다, 내가 그것을 쓴 때, 실제 코드가 아닙니다 – Mujahid

0

내가 바로 당신이 서비스 호출 myservice.setToLibrary(newItem);를 통해 다시 서비스 호출 즉 $http POST or GET입니다 getItems();을 통해 DB의 항목 존재를 읽고 그 후 항목을 추가하는 있으리라 믿고있어합니다. 당신의 getItems()도 전에 실행되는 '정의되지 않은'출력

당신이 $http 자연에서 비동기이 개 $http 추가 통화 및 read.As을하고있는 당신의 vm.addItem() 기능에서 볼 수 있듯이, 뒤에

이유 당신의 myservice.setToLibrary(newItem)이 완전하게 실행됩니다.

이로 인해 정의되지 않은 결과가 표시됩니다.

해결 방법

는 우리가 우리의 setToLibrary() 호출의 성공 후 우리 getItems() 전화를했다으로이 방법을 사용하면 결과를 원하는 얻을 것이다

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem).success(function(data){ 
     getItems(); 
    }); 

아래처럼 vm.addItem() 기능에 약간의 조정을합니다.

+0

짧은 명확한 설명 주셔서 감사합니다, 나는 @ Sravan의 대답을 시도하고 그것은 나를 위해 일했습니다. – Mujahid

+0

대단하네요! 천만에요 :) –