2016-07-13 69 views
0

我有一個角度單頁應用程序。通過上下文服務可以獲得全局可用狀態。解決所有已解決的承諾中的新數據

這方面的服務有get和set方法。 get方法是一個承諾,因爲在頁面加載後上下文尚未設置,但是通過API獲取。

一旦上下文建立的承諾得到解決,我可以通過存取權限get方法我的上下文。

但是我怎麼能對付的設置方法。可以使用set方法更改上下文。但是由於promise已經解決了,get方法將返回舊的上下文。

是否有可能「替代」的數據上,然後調用該承諾的回報後,它已經解決了?

謝謝!

+1

不,這是不可能的。代碼已經運行,在這種情況下,你必須存儲回調函數並再次調用它。 – Robin

+0

你可以使用rxjs流subscribe然後,只要有新的數據可用,你的回調被調用, – xelilof

+1

代碼價值1024字。顯示你正在做什麼的[mcve]。 –

回答

1

get方法是一個承諾......

這並沒有太大的意義。我假設它返回一個承諾。

但是我怎麼能對付的設置方法。可以使用set方法更改上下文。但是由於promise已經解決了,get方法將返回舊的上下文。

代碼不應該保持和重用老許這樣。例如,你建議:

var p = object.getThePromise(); 
p.then(function(value) { 
    // ...use the value... 
}); 
// later - this is the bit that's wrong 
p.then(function(value) { 
    // ...use the value... 
}); 

它不應該這樣做。如果它稍後再次需要該值(如果它需要一個新值),它應該返回到getThePromise

是否有可能'替代'數據承諾答覆後,然後調用已解決?

否。承諾合同的一個重要部分是承諾只能定期一次,而且結算價值不會改變。

很難說沒有看到您的API,但如果API給人的印象是可以調用「獲得」,然後重新使用所產生的承諾,最好是更改API,使其不再給出該印象。但是,如果沒有API的具體細節,很難說這是否是這種情況,或者提出改變。