【问题标题】:how to create $http post service using defer and promise in angularjs如何在angularjs中使用defer和promise创建$http post服务
【发布时间】:2016-02-25 14:02:46
【问题描述】:
var myAppModule = angular.module('myApp', []);
myAppModule.controller('mainController', function($scope, userService) {
    $scope.addUser = function() {
        var email = $scope.user.email;
        var password = $scope.user.password;
        userService.addFriend(email, password).then(function() {
            console.log( 'errorMessage' );
        });
        $scope.user.email = '';
        $scope.user.password = '';
    }
});
app.service('userService', function($http, $q) {
    var deffered = $q.defer();
});

这是我的不完整代码,请更正它。请改正。

【问题讨论】:

  • 你遇到了什么错误?
  • 不,我没有收到任何错误,我只是想知道服务和控制器的结构,即数据如何使用 promises 和 defer 流动

标签: jquery angularjs node.js


【解决方案1】:

请看下面的 cmets 数据如何在控制器和服务之间流动..

var myAppModule = angular.module('myApp', []);
// Your controller starts here 
     myAppModule.controller('mainController', function($scope,userService){
        $scope.addUser = function(){
         var email = $scope.user.email;
         var password = $scope.user.password;
         // Call the Service API which is returns a PROMISE
         userService.addFriend(email, password).then(function(response){
         // you will receive data here .. 
         // do what you want to do with data on success

         }, function(error){ // here error comes ...});
         $scope.user.email = '';
         $scope.user.password = '';
       }
  });

  // your service starts here 

  app.service('userService', function($http){
    // you dont require defer $q
    // var deffered = $q.defer();
    // this function returns $http promise...

    this.addFriend = function(email, password){

        return $http({
            url : "enter url here",
            data : JSON.stringify({email: email, password : password}),
            method : "GET" // can be GET or POST based on your API
          });

    };
});

【讨论】:

    【解决方案2】:

    你需要在userService中定义需要的方法addFriend,这里是一个例子

    myAppModule.service('userService', function($http, $q){
          this.addFriend = function (email, password) {
                var deferred = $q.defer();
                var promise = $http({
                    method: 'POST',
                    url: <<Url>>,
                    data: { 
                        email : email, 
                        password : password
                    }
                }).success(function (data) {
                    deferred.resolve(data);
                }).error(function (data, status) {
                    deferred.reject(data);
                });
                return promise;
         }
    });
    

    【讨论】:

    • 不应该返回return deferred.promise; 而不是$http promise ..?
    • 你可以定义它的控制器来接收该服务
    • @user3565243,您可以使用问题中定义的控制器
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多