2017-10-27 28 views
1

서버에서 관련된 모든 메소드와 콜백을 처리하기 위해 공장에 $q을 주입 중입니다. 에서Promise가 각도로 컨트롤러로 돌아 오지 않습니다.

$scope.addArticle = function(){ 

    console.log('add article route working'); 
    ArticleService.addArticle($scope.article.title, $scope.article.content, $scope.article.url) 

    .then(function(){ 
     refresh(); // here is where I am expecting it to return 
    } 
    .catch(function(){ 
     $scope.error = true; 
     $scope.errorMessage = "Something went wrong!"; 
     $scope.article = {}; 
    })); 
    } 

$scope.remove = function(id){ 
    ArticleService.deleteArticle(id) 
    .then(function(){ 
     refresh(); 
    }); 
    } 

: 나는 MongoDB를 데이터베이스에 데이터를 추가하는 방법을 가지고, 나는 긍정적 인 대답을 받아 내가 약속을 해결하지만 컨트롤러 컨트롤러에서

에 다시 반환하지 않습니다 모든 잘 작동한다 내가 추가 기사, 왜 같은 문제를 가지고 있지 않습니다와 함께 일을 오전으로 공장

myApp.factory('ArticleService', 
['$q', '$timeout', '$http', 
function($q, $timeout, $http){ 

    var article = null; 

    return({ 
     addArticle : addArticle, 
     getArticles : getArticles, 
     deleteArticle : deleteArticle 

    }); 

    function addArticle(title, content, imgUrl){ 
     var date = getDatetime(); 

     var deferred = $q.defer(); 

     var article = { 
      title : title, 
      content : content, 
      imgUrl : imgUrl, 
      date 
     } 

     $http.post('user/edit/addArticle', article) 

     .then(function(response){ 
      if(response.status === 200){ 
       deferred.resolve(); 
      } 
     }); 

     return deferred.promise; 


    } 

    function getArticles(){ 

     var deferred = $q.defer(); 

     $http.get('user/edit/getArticles') 
     .then(function(result){ 
      deferred.resolve(result.data); 
      /* article = result.data; 
      return article; */ 
     }, function(error){ 

     }); 

     return deferred.promise; 
    } 

    function deleteArticle(id){ 

     var deferred = $q.defer(); 

     $http.delete('user/edit/deleteArticle/' + id) 
     .then(function(response){ 
      if(response.status === 200){ 
       deferred.resolve(); 
      } 
     }) 

     return deferred.promise; 
    } 

    function getDatetime() { 
     return (new Date); 
     }; 

}]); 

삭제 문서 정확히 같은 방식으로 컨트롤러로 약속을 반환? 미리 감사드립니다.

답변

1

코드는 완벽하지만 구문에 문제가 있습니다. 이 같은

올바른 순서 : 구문 수정 코드 아래

$http.get(url) 
    .then(function(response) { 
     // response body 
    }).catch(function(e) { 
     // catch block 
    }).finally(function() { 
     //finally block 
    }); 

:

.then(function() { 
    refresh(); // here is where I am expecting it to return 
}) 
.catch(function() { 
    $scope.error = true; 
    $scope.errorMessage = "Something went wrong!"; 
    $scope.article = {}; 
}); 
+0

@ Juana 다른 문제가있는 경우 알려주십시오. –

+0

문법적인 문제였습니다. 감사합니다. – Juanca

1

$http 기본적으로 응답을 약속으로 보냅니다. defer 인스턴스를 사용하여 새로운 약속을 만들 필요가 없습니다. http 호출 만 반환하면됩니다.

function addArticle(title, content, imgUrl){ 
     var date = getDatetime(); 
     var article = { 
      title : title, 
      content : content, 
      imgUrl : imgUrl, 
      date 
     } 
     return $http.post('user/edit/addArticle', article); 
    } 

그런 다음 컨트롤러에서 데이터를 잡습니다.

ArticleService.addArticle($scope.article.title, $scope.article.content, $scope.article.url)  
    .then(function(response){ 
     console.log(response.data) 
     refresh(); // here is where I am expecting it to return 
    } 
+1

방법 영업 이익의 문제를 해결할 것이 온다? 기술적으로 이것은 지침을 따를 것입니다. 그러나 이것이 OP의 코드가 작동하지 않는 이유에 대한 대답은 아닙니다 .. –

+0

내가 아는 것으로부터 어떤 데이터도 기대하지 않고 있습니다. ArticleService.addArticle ($ scope.article.title, $ scope.article.content, $ scope.article.url) .then (function() { refresh() // 여기에 내가 기대하는 곳이 있습니다. return } – Juanca