我已經返回,如果用戶當前已登錄在解決一個承諾,或等待解決,一旦用戶已經登錄,這樣你就可以做到這一點的函數...Angular promise .then()重複?
myService.waitForLogin().then(function(){
// Subscribe to pusher.com events
});
然後我用類似的調用來在用戶註銷時取消訂閱事件。
麻煩的是,我希望每次在用戶登錄時運行我。然後()的代碼,所以這個過程是....
如果用戶登錄,運行代碼。
如果不是,請等到他們登錄後再運行代碼。
如果他們註銷然後又回來,再次運行代碼。
我最初使用$ rootscope。$上聽登入/註銷這對於重複出現行之有效的活動,但我需要它是基於在用戶已經登錄的情況下的諾言。
這裏是我的代碼:
var defer = $q.defer();
if(isLoggedIn()){
defer.resolve();
}
else{
var offLoggedInTrue = $rootScope.$on('loggedin-true', function(){
defer.resolve();
offLoggedInTrue();
});
}
return defer.promise;
承諾只能得到按定義解決一次......。也許你應該嘗試使用其他異步系統,如'Rx.Observable'(儘管這是一個完全不同的API) – olivarra1
或者如果用戶已經登錄,你可以手動觸發'loggedin-true'事件。 – sniels
我不確定這是否是可能的與rxjs。基本上,是的,這是可能的,但我們都知道,'window.setTimeout'具有最大限制。還要記住移動瀏覽器問題,由於安全性和GUI凍結原因,沒有實現'window.setTimeout'。但是你可以在一段時間內合理地發出事件,這會檢查用戶是否登錄。或者更好:改變你的概念。還有很多其他的方法來完成這個共同的任務。也許你可以使用REST請求到你的後端來定期檢索用戶狀態。 – alpham8