0

我有一個工廠對象,其中包含專用對象,它用於緩存使用工廠可用函數從API檢索結果。角廠存儲承諾結果

global.mainApp.factory('SessionFactory', function (UserEndpointsResource, SiteEndpointsResource) { 
    var data = { 
     /** 
     * @type {boolean|null} 
     */ 
     isLoggedIn: null 
    }; 
    return { 
     isUserLoggedIn: function (callback) { 
      if (data.isLoggedIn != null) { 
       callback(data.isLoggedIn); 
      } 
      else { 
       UserEndpointsResource.isLoggedIn().$promise.then(function (res) { 
        var isUserLoggedIn = res.status == 1; 
        // Trying to set the result to the outer scope data variable 
        data.isLoggedIn = isUserLoggedIn; 
        callback(isUserLoggedIn); 
       }, function (failureData) { 
        data.isLoggedIn = false; 
        callback(false); 
       }); 
      } 
     }, 
     ... 
    }; 
}); 

問題是,每次我調用isUserLoggedIn函數時,data.isLoggedIn始終爲空。

如何更改promise函數內的工廠數據對象?

謝謝。

+0

有沒有機會實例化多個'SessionFactory's? – Bergi

+1

Protip:[不存儲承諾結果,存儲承諾本身](http://stackoverflow.com/q/18744830/1048572) – Bergi

+0

你是否檢查過你的代碼是否正在進入'data.isLoggedIn = isUserLoggedIn;'? –

回答

0

使用評論中提供的建議,又名do not store promise results, store promises themselves,這是修改的工作代碼!

global.mainApp.factory('SessionFactory', function (UserEndpointsResource, SiteEndpointsResource) { 
    var data = { 
     /** 
     * @type {boolean|null} 
     */ 
     isLoggedIn: null 
    }; 
    return { 
     isUserLoggedIn: function (callback) { 
      if (data.isLoggedIn != null) { 
       data.isLoggedIn.then(function (isLoggedIn) { 
        callback(isLoggedIn.status == 1); 
       }); 
      } 
      else { 
       data.isLoggedIn = UserEndpointsResource.isLoggedIn().$promise.then(function (res) { 
        var isUserLoggedIn = res.status == 1; 
        callback(isUserLoggedIn); 
        return isUserLoggedIn; 
       }, function (failureData) { 
        data.isLoggedIn = false; 
        callback(false); 
        return null; 
       }); 
      } 
     } 
    }; 
});