为什么我的承诺不是在角度js工作?

时间:2016-03-01 09:34:27

标签: javascript angularjs promise

下面是我的角度控制器,但在其中,我的承诺似乎不起作用。 console.log没有显示响应,也没有显示警告。

myapp.controller('contrl6', ['$scope','$q','$localStorage','$http',
  function ($scope,$q,$localStorage,$http) {

    $scope.myXhr = function(){

    var q = $q.defer();

     $http({
        method: 'GET',
         url: '/api/session_data'
        })
        .success(function(response){
            console.log(response);
            q.resolve('request successful');
        })
        .error(function(response){
          console.log("error");
            q.reject('ERROR');
        });


    return q.promise;
}
console.log("hi");

var myPromise = $scope.myXhr();
  myPromise.then(function(resolve){
        alert(resolve);
        console.log(resolve);
        }, function(reject){
        alert(reject);
        console.log(reject);      
    });


  }]);

3 个答案:

答案 0 :(得分:2)

myxhr内,没有任何内容与$http的结果连接在一起。不要担心创建新的承诺,因为$http已经返回一个承诺:

$scope.myXhr = function(){

 return $http({
    method: 'GET',
     url: '/api/session_data'
    })
    .then(function(response){
        return response;
    })
    .catch(function(response){
        throw new Error('ERROR');
    });
}

答案 1 :(得分:2)

  

弃用通知

     

已弃用$http遗留承诺方法.success.error。请改用标准.then方法。 1

$scope.myXhrPromise = function(){
    return (
        $http({
            method: 'GET',
            url: '/api/session_data'
        }).then (function onFulfilled (response) {
            console.log(response.data);
            //return data for chaining
            return response.data;
        }).catch (function onRejected (response) {
            console.log(response.status);
            //throw to chain rejection
            throw response;
        })
    );
};

答案 2 :(得分:0)

我将您的代码复制/粘贴到Plunkr中,一旦我正确连接它就可以正常工作。

Plunkr example here

正如Duncan所说,请确保使用ng-app和ng-controller正确连接。如果您可以使用您正在使用的HTML标记更新您的问题,我们可以提供更多帮助。