Angular: Switch语句中的异步承诺

Angular: Asynchronous Promise in Switch Statement

本文关键字:异步 承诺 语句 Switch Angular      更新时间:2023-09-26

有一个控制器:

app.controller('myController', function ($scope, myService) {
    $scope.pageData = {};

    myService.promiseGetDataFromServer()
        .then(function (response) {
        $scope.pageData = response.data;
    }, function (reason) {
       // error has occurred.. etc...
    });
}

到目前为止一切正常。然而,我想基于一些确定性逻辑来填充$scope.pageData。我试过了:

app.controller('myController', function ($scope, myService2, thing) {
   $scope.pageData = {}
   switch (thing)
   {
       case 'whatever':
         myService2.promiseGetWhateverFromServer()
            .then(function (response) {
            $scope.pageData = response.data;
         }, function (reason) {
           // error has occurred.. etc...
         });
        break;
        case 'something':
          myService2.promiseGetSomethingFromServer()
              .then(function (response) {
              $scope.pageData = response.data;
           }, function (reason) {
              // error has occurred.. etc...
           });
           break;
   }
}

没有服务器错误,我记录了响应,一切都很好,但是我的视图没有渲染,因为我怀疑$scope.pageData的属性是未定义的。

我如何绕过这个?我希望视图在switch语句解决后加载

如果我没有弄错的话,您可以将逻辑与选择适当的服务和执行请求分开,如下所示:

app.controller('myController', function ($scope, myService2, thing) {
   $scope.pageData = {};
  //here we select service
  $scope.getDataForPageData = function(parameter){
    var serviceToSelect;
     switch (parameter)
     {
         case 'whatever':
           serviceToSelect = myService1;
          break;
          case 'another'
          serviceToSelect = myService2;
          break;
     }
     return serviceToSelect;
  }
  //do request and assign $scope.pageData when resolved
  $scope.getDataForPageData(thing).promiseGetSomethingFromServer()
        .then(function (response) {
            $scope.pageData = response.data;
        }, function (reason) {
           // error has occurred.. etc...
        });
}