2015-12-10 32 views
0

在我的角度簡單的應用程序中,我遇到了回調函數中沒有完全可用的工廠問題。角度服務在回調函數中部分可用

Here is a plnckr帶有簡化版本的應用程序。

這裏是我的代碼:

控制器:

function activate() { 

     return featureService.getBoards().then(callBackOk, callBackError); 

     function callBackOk(data) { 
      vm.boards = data; 
     }; 

     function callBackError(error) { 
      console.log(error); 
     }; 
    }; 

featureService:

function getBoards() { 

     return connectionService.get(urls.featureUrl).then(callBack, callBackError); 

     function callBack(response) { 

      boards = {}; 
      actuators = []; 

      response.data.forEach(function(feature){ 
       formatFeature(feature); 
       storeFeature(feature); 
      }); 

      return boards; 
     } 

     function callBackError(error) { 
      var deferred = $q.defer(); 

      console.log(angular.toJson(loginService.issue)); 
      console.log(angular.toJson(loginService.isOk)); 
      console.log(angular.toJson(loginService.error)); 
      console.log(angular.toJson(loginService)); 

      loginService.issue("Unable to retrieve objects", error).then(function(){ 
       deferred.resolve(getBoards()); 
      }, function(error){ 
       deferred.reject(error); 
      }); 

      return deferred.promise; 
     } 
    } 

控制檯日誌:

undefined features.services.js:71:1 
undefined features.services.js:72:1 
{"label":"","detail":{}} features.services.js:73:1 
{"error":{"label":"","detail":{}},"graphicDefered":{}} features.services.js:74:1 
Error: loginService.issue(...) is undefined 
    [email protected]://localhost:8100/app/features/features.services.js:76:17 

最後,返回的對象來回米login服務:

return { 
     'login'  : login, 
     'logout' : logout, 
     'isOk'  : function(){return ok;}, 
     'issue'  : issue, 
     'error'  : error, 
     'graphicDefered' : graphicDefered 
    }; 

我假定get方法thows將由callBackError函數被截獲一個例外。我懷疑延遲加載器,但我不知道如何解決它的想法...

+0

我在這裏看到很少的angularjs代碼....你能發佈所有的代碼嗎?還有什麼connectionService? – Gianmarco

+0

對不起,我不能發佈整個代碼... connectionService實際上只是$ http的包裝,我假設'get'會產生一個異常,被callBackError函數捕獲。我試圖在plnckr上創建相同的情況。 – Azca

+0

我編輯了這個問題,你可以找到描述錯誤的plnckr。 – Azca

回答

1
undefined features.services.js:71:1 
undefined features.services.js:72:1 

這兩undefiends是因爲你是在功能調用angluar.toJson。只要嘗試console.log(loginService.issue),它會打印它。

功能問題只返回登錄(承諾)如果(detail.status === 403 || detail.status === 401)爲true否則它返回undefined,你不能再調用undefined。

function issue(label, detail) { 
     error.label = label; 
     error.detail = detail; 

     if (detail.status === 403 || detail.status === 401) { 
      ok = false; 

      return login(account.mail, account.pwd); 
     } 
    } 
+0

非常感謝,我不懂日誌這種方式...我不知道函數解析爲json時返回的undefiends ... – Azca