Angularjs 不确定为什么承诺不是';t完成

Angularjs 不确定为什么承诺不是';t完成,angularjs,promise,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

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

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与之前相同)


现在,{s}}不会显示在我的HTML页面的数据绑定上

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

var getResponse = function () {
    formulaservice.postScreen(onComplete, onError);
}
相反,使用
。然后
钩住它的完成

var getResponse = function () {
    formulaservice.postScreen().then(onComplete, onError);
}
新的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);
    });
}
或者,您也可以调用。然后按现有的服务方法调用:

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

你需要在你的控制器代码中调用
getResponse()
。我这样做了(只是没有包括在内)是的,我意识到我忘了调用。然后我一发布这个消息。谢谢,我会在计时器一结束就接受它。-1这会破坏链接并创建一个更糟糕的API。看。
var getResponse = function () {
  formulaservice.postScreen().then(function() {
    //do something with onComplete, onError
  });
}