为什么我的承诺不能在角度js中工作

Why isnt my promise working in angular js?

本文关键字:js 工作 我的 承诺 不能 为什么      更新时间:2023-09-26

下面是我的角度控制器,但在其中,我的承诺似乎不起作用。 控制台.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);      
    });

  }]);

弃用通知

$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;
        })
    );
};

> 在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');
    });
}

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

Plunkr 示例在这里

正如邓肯所说,确保使用ng-app和ng-controller正确连接它。如果您可以使用正在使用的HTML标记更新您的问题,也许我们可以进一步提供帮助。