Angular"无法读取属性'然后'未定义"有希望

时间:2016-11-25 20:19:17

标签: javascript angularjs promise es6-promise

我被困在为什么我的承诺不起作用。从我看过的其他文章中,我认为我正确地做到了。这是我目前的代码:

工厂代码

factory.isLoggedIn = function() {
  $http.get('/api/v1/fitbit/auth')
      .success((data) => {
           return data.status;
       })
       .error((error) => {
           console.log('Error: ' + error);
       });
}

控制器代码

    $scope.fitbitAuth = function() {
        FitbitFactory.isLoggedIn()
            .then(
                function(data) {
                    $scope.fitbitStatus = data;
                },
                function(errorData) {
                    console.log(errorData);
                });
        return $scope.fitbitStatus;
    };

根据我对承诺的理解,return $scope.fitbitStatus应该填充$scope.fitbitAuth,但它不是。我还在Factory中返回一个布尔值,它应填充$scope.fitbitStatus

2 个答案:

答案 0 :(得分:2)

您必须Socket SOCK = SRVSOCKET.accept();某事(承诺),或return

工厂代码:

undefined

控制器代码:

factory.isLoggedIn = function() {
  return $http.get('/api/v1/fitbit/auth');
}

您工厂中的完整成功/错误块不是必需的,应该删除。我还不确定为什么你$scope.fitbitAuth = function() { return FitbitFactory.isLoggedIn() .then( function(data) { $scope.fitbitStatus = data; }, function(errorData) { console.log(errorData); }); }; 因为它在返回时未定义。

编辑:编辑答案以实际返回承诺。

答案 1 :(得分:1)

目前,您尚未从isLoggedIn工厂方法返回任何内容,并且您正在调用.then方法。

要使其正常工作,请返回$http promise object from service method. In your case you could simply return $ http.get method call which return promise object itself and then you can easily chain them up by calling FitbitFactory.isLoggedIn()。then`

factory.isLoggedIn = function() {
  return $http.get('/api/v1/fitbit/auth');
}