Promise.Resolve的目的是什么?

时间:2016-01-26 23:36:14

标签: es6-promise

我正在通过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的形式包装危机数组的实例吗?我没有看到直接访问危机数组的好处或目的。

2 个答案:

答案 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调用。使用该服务。