【问题标题】:How to wait for my services function to finish in AngularJS?如何等待我的服务功能在 AngularJS 中完成?
【发布时间】:2020-05-06 17:24:37
【问题描述】:

我用一个函数做了一个服务。

app.service('getService', ['$http', function($http){    
    this.getProducts = function(log = true){
         $http({
             url: "/admin/products"
         }).then(function successCallback(response) {
             log == true ? console.log(response) : false;
             return response.data;
         }, function errorCallback(response) {
             log == true ? console.log(response) : false;
         });
    }
}]);

之后,我调用它并等待函数完成,但这不起作用。

app.controller('categoryCtrl', ['$scope','staticsService', function ($scope, getService) {
    turnonloader();
    $scope.model = getService.getProducts().then(function(){
        turnoffloader();
        console.log("Finished!");
    });
}]);

哪个是最好的解决方案?

【问题讨论】:

  • 你需要从getProducts返回一些东西,所以return $http(...);
  • 当服务命名为'getService'时,控制器错误地注入'staticService'
  • 很抱歉编辑不当

标签: angularjs angularjs-service


【解决方案1】:

服务应return承诺:

app.service('getService', ['$http', function($http){    
    this.getProducts = function(log = true){
         ̶$̶h̶t̶t̶p̶(̶{̶
         return $http({
             url: "/admin/products"
         }).then(function successCallback(response) {
             log == true ? console.log(response) : false;
             return response.data;
         }, function errorCallback(response) {
             log == true ? console.log(response) : false;
             //IMPORTANT
             throw response;
         });
    }
}]);

错误处理程序重新抛出错误响应也很重要。否则,promise 将从拒绝转换为返回undefined 的成功promise。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多