2016-01-26 57 views
1

我正在通過Angular2啓動。Promise.Resolve的目的是什麼?

在名爲 '應用程序/危機中心/ crisis.service.ts' 這裏的文件: https://angular.io/resources/live-examples/router/ts/plnkr.html

他們有這樣一行:

var crisesPromise = Promise.resolve(crises); 

什麼是這樣做的目的到底是什麼?我已閱讀有關一般Promise.Resolve JavaScript的使用,但仍然不完全遵循爲什麼它在這裏使用。

難道僅僅是以單例類似的方式包裝危機數組的實例?我不直接直接訪問危機數組看到好處或目的。

+0

可能重複[什麼時候應該直接調用Promise.resolve()?](http://stackoverflow.com/questions/32461170/when-should-i-call-promise-resolve-directly) – Bergi

回答

3

難道僅僅是用一個Singleton類似的方式來包裝危機數組的一個實例嗎?我不直接直接訪問危機數組看到好處或目的。

它是當你已經知道答案時創造一個承諾。主要用例:API的使用者期望您返回一個承諾。但既然您已經知道答案,您可以使用Promise.resolve創建已解決的承諾並將其退回。

0

如果你看一下hero-list.component.ts

ngOnInit() { 
    this._service.getHeroes().then(heroes => this.heroes = heroes) 
} 

他們要求的服務方法getHeroes返回一個Promise和緊接着,他們呼籲該then方法返回的承諾,其中包括講述了承諾回調反對一旦解決後應該做什麼。

hero.service.ts他們有heroes作爲本地陣列和他們沒有做服務器的呼叫,但在實際的應用程序,你不會在這裏有這樣的數據,你會叫一個遠程服務器數據,所以如果你直接返回Array而不是用Promise包裝它,將來當你改變服務來調用一個真正的http方法時,你必須改變服務和所有使用它的組件,接收Promise而不是Array。

通過將本地數組包裝到承諾中,您可以確保組件上的代碼已經可以與承諾一起工作,因此,如果承諾得到同步解析或異步解析並不重要,您也不在乎,在這兩種情況下都能正確工作,所以您可以通過使用本地模擬數據測試您的服務開始,將數據包裝到Promises中並稍後將其更改爲真正的http調用,只需修改服務而不涉及使用該服務的所有組件。