angularjs控制器中的承诺 - 如何实现

时间:2014-10-20 10:13:16

标签: javascript angularjs promise angular-promise

我正在尝试使用我的一个控制器中的promises实现一个基本功能,这样我就可以确保它在添加更复杂的功能之前正常工作。我在lockPromise方法中的“.then(function(data){”中得到“TypeError:undefined is not function”。

从视图调用的函数

    $scope.lockPromise = function(fieldId) {
        $scope.getLockMessage2(fieldId).getWeather()
            .then(function(data) {
                if (data === "returned SUCCESS info") {
                    alert("data is good");
                } else {
                    alert("FAILED");
                }
            }, function(error) {
                alert(error);
            });
    };

ctrl中的第二个功能

    $scope.getLockMessage2 = function(fieldId) {
        return{
            getWeather: function() {
                return $http.get('/api/getData')
                    .then(function(response) {
                        if (typeof response.data === "string") {
                            return response.data;
                        } else {
                            return $q.reject(response.data);
                        }
                    }, function(response) {
                        return $q.reject(response.data);
                    });
            }
        };
    };

API GET

[Route("api/getData")]
public HttpResponseMessage GetData()
    {

        string data = JsonConvert.SerializeObject("returned SUCCESS info");

        return new HttpResponseMessage
        {
            Content = new StringContent(data, Encoding.UTF8, "application/json")
        };
    }

编辑1 : 更新代码以反映评论

2 个答案:

答案 0 :(得分:1)

更改

$scope.getLockMessage2(fieldId).then

$scope.getLockMessage2(fieldId).getWeather().then

答案 1 :(得分:0)

$ scope.getLockMessage2返回一个对象,而不是函数。

我认为代码应该(未经过测试):

$scope.lockPromise = function(fieldId) {
    $scope.getLockMessage2(fieldId).getWeather()
        .then(function(data) {
            if (data === "good") {
                alert("data is good");
            } else {
                alert("FAILED");
            }
        }, function(error) {
            alert(error);
        });
};