我正在经历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的方式包装危机数组的实例吗?我看不到直接访问危机数组的好处或目的。
发布于 2016-01-27 07:38:20
仅仅是以类似于单例的方式包装危机数组的实例吗?我看不到直接访问危机数组的好处或目的。
它是在你已经知道答案的时候创建一个承诺。主要用例: API的消费者希望您返回一个promise。但是既然您已经知道了答案,那么您可以使用Promise.resolve来创建一个已经解析的promise并返回它。
发布于 2016-01-27 11:01:38
如果你看一下hero-list.component.ts
ngOnInit() {
this._service.getHeroes().then(heroes => this.heroes = heroes)
}它们调用返回Promise的服务方法getHeroes,然后在返回的promise上调用then方法,包括告诉promise对象在解析后要做什么的回调。
在hero.service.ts中,它们将heroes作为本地数组,并且它们不必执行服务器调用,但在实际的应用程序中,您不会在这里拥有此数据,您将调用远程服务器来获取这些数据,因此,如果您将数组直接返回,而不是用Promise包装它,将来当您将服务更改为调用真正的http方法时,您必须同时更改服务和所有使用它的组件,以接收Promise而不是数组。
通过将本地数组包装到Promise中,您可以确保组件上的代码已经与Promise一起工作,所以promise是同步还是异步解析都无关紧要,您也不关心它在这两种情况下都会正确工作,所以您可以从使用本地模拟数据测试服务开始,将数据返回到promise中,然后通过修改服务而不涉及使用该服务的所有组件,将它们更改为真正的http调用。
https://stackoverflow.com/questions/35026099
复制相似问题