2017-08-09 188 views
0

首先,我想解釋一下,我已經閱讀了很多答案,並且我明白阻止線程等待響應是錯誤的。但是我有一個問題不是很容易解決。等待承諾Angular 2

我有一個高級項目,我有一個會話服務的功能,它是getAuthenticationKey():string我用它從代碼的不同部分(調用休息功能等),我做了很多普通函數,因爲我認爲這個值將會存在或不存在。

現在我們做了一些更改,如果需要,getAuthenticationKey將不得不調用rest函數來刷新密鑰。

所以問題是,我明白最好的辦法是做出承諾並重構整個項目,但這在數小時內太昂貴了,因爲我必須爲該功能做出承諾,並且所有其他依賴該功能(幾乎所有的應用程序),並考慮到刷新操作完成得很快,一天或一週被調用一次,有什麼辦法解決這個問題,而不重構所有的項目?

回答

0

您可以保留原樣的代碼,只需添加一個定期檢查程序(setInterval(...))即可在必要時更新authenticationKey。如果您知道密鑰的使用期限,則只需使用setTimeout(...)而不是定期檢查。

+0

我必須刷新getAuthenticationKey中的密鑰,所以我必須等待函數中的新密鑰,沒有其他方式來等待響應? –

+0

您可以使用同步XhrRequest,但它已被棄用https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests這樣可以避免使用Promise。也許如果你寫了爲什麼你不能在後臺刷新授權密鑰,它可能有助於找到解決方案。 –

+0

事實上,我需要'getAuthenticationKey'返回一個有效的密鑰(對照休息操作進行檢查)而不必做出承諾。所以我不必重構整個項目。如果我知道在創建'getAuthentitacionKey'函數時必須檢查有效性,否則我會用一個承諾來完成,但現在是做重構的噩夢。 –

0

我使用Resolver解決了這個問題,因爲我在加載頁面時檢查身份驗證。在解析器中,我檢查auth和rest服務,並將結果存儲在服務中。