我正在通过Angular2启动。
在这里名为'app / crisis-center / crisis.service.ts'的文件中: https://angular.io/resources/live-examples/router/ts/plnkr.html
他们有这一行:
var crisesPromise = Promise.resolve(crises);
这究竟是为了什么目的?我已经阅读了关于一般Promise.Resolve JavaScript的用法,但仍然没有完全理解为什么在这里使用它。
仅仅是以类似Singleton的形式包装危机数组的实例吗?我没有看到直接访问危机数组的好处或目的。
答案 0 :(得分:8)
仅仅是以类似Singleton的形式包装危机数组的实例吗?我没有看到直接访问危机数组的好处或目的。
当你已经知道答案时,就是要创造一个承诺。主要用例:API的使用者希望您返回一个承诺。但由于您已经知道答案,因此可以使用Promise.resolve
创建已解决的承诺并将其返回。
答案 1 :(得分:0)
如果你看一下hero-list.component.ts
:
ngOnInit() {
this._service.getHeroes().then(heroes => this.heroes = heroes)
}
他们正在调用返回getHeroes
的服务方法Promise
,然后,他们在返回的promise上调用then
方法,包括告诉promise对象的回调做一次就解决了。
在hero.service.ts
中,他们将heroes
作为本地阵列,他们不必进行服务器调用,但在真实应用中,您不会拥有此数据在这里,你要为远程服务器调用那些数据,所以如果你直接返回数组而不是用Promise包装它,将来当你改变服务来调用真正的http方法时,你会#39 ; d必须更改服务和使用它的所有组件,以接收Promise而不是Array。
通过将本地数据包装到Promise中,您可以确保组件上的代码已经可以使用Promise,因此,如果该promise可以同步或异步解析,也不关心,它和#39; ll在这两种情况下都能正常工作,所以你可以先用本地模拟的数据测试你的服务,然后将这些数据包装到Promises中,然后通过修改服务而不触及所有组件来将它们更改为真正的http调用。使用该服务。