不确定为什么承诺没有完成

时间:2014-08-25 15:24:31

标签: angularjs promise

以前在我的角度控制器中,我有:

var getResponse = function () {
    $http.post("api/screen/", { Key: 'banana', value: null })
        .then(onComplete, onError);
    };
var onError = function (reason) {
        $scope.error = "Fail";
    };
var onComplete = function (response) {
        $scope.s = response.data;
    };
getResponse()

我能够通过HTML页面上的数据绑定看到{{s}}。

然后我决定通过创建一个单独的服务来重构控制器:

var postScreen = function () {
    return $http.post("api/screen/", { Key: 'banana', value: null });
}

我在我的控制器中有这个(onComplete,onError和以前一样)

var getResponse = function () {
    formulaservice.postScreen(onComplete, onError);
}

现在{{s}}没有显示在我的HTML页面的数据绑定上。

2 个答案:

答案 0 :(得分:2)

在这里,您使用两个参数调用postScreen函数,但它不会采用您定义它的任何方式:

var getResponse = function () {
    formulaservice.postScreen(onComplete, onError);
}

相反,使用.then挂钩完成

var getResponse = function () {
    formulaservice.postScreen().then(onComplete, onError);
}

答案 1 :(得分:0)

你的新postScreen()函数正在返回一个Angular promise对象。您需要在promise对象上调用.then()来执行您想要执行的操作。我建议更改您的服务函数以将回调方法作为参数。

var postScreen = function (successCallback, errorCallback) {
  $http.post("api/screen/", { Key: 'banana', value: null })
    .success(function(result) {
      successCallback(result);
    })
    .error(function(error) {
      errorCallback(error);
    });
}

或者,您可以在服务方法上调用.then:

var getResponse = function () {
  formulaservice.postScreen().then(function() {
    //do something with onComplete, onError
  });
}