2016-01-26 56 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调用,只需修改服务而不涉及使用该服务的所有组件。