这个TypeScript代码片段发生了什么?

时间:2017-06-24 14:41:43

标签: typescript

我对TypeScript很新,但使用过JavaScript。我正在学习TypeScript以使用Angular 2.在我的一个教程中,我遇到了这段代码......

return new Promise(resolve => {
  // Simulate server latency with 2 second delay
  setTimeout(() => resolve(this.getHeroes()), 2000);
});

我只读了一下Promise类,但似乎它包含了一个resolve方法。所以,我试图找出上面代码片段中实际发生的数据流。 Promise类是使用包含方法的resolve变量的参数实例化的吗?我想我有点困惑,因为代码中的第二个解决方法。如果这是Promise类的一部分,那么在Promise对象被实例化之前它是如何被调用的。除非解决方案是某种静态方法?

基本上,我正试图弄清楚返回声明中发生了什么......

Mahalo提前!

1 个答案:

答案 0 :(得分:3)

promise对象构造函数接受两个参数:

  • resolve:当您希望promise发出其工作结果时应该调用的方法(例如:从HTTP调用返回数据)

  • reject:当您希望承诺发出错误时应调用的方法。

这两个论点与承诺最终的两种方式相匹配。您提供的代码段忽略了第二个参数,因此此承诺永远不会发出错误。让我们更仔细地看看我们拥有的东西:

setTimeout(() => resolve(this.getHeroes()), 2000);

setTimeout有两个参数

  • callback:将来要执行的功能

  • delay:执行

  • 之前需要等待多长时间

在您的情况下,在2000毫秒后,将执行() => resolve(this.getHeroes())。这是一个没有参数()且其主体只有一行代码的函数:

resolve(this.getHeroes())

所以基本上,在2秒内,承诺将通过发出getHeroes()方法的结果来解决。无论哪个代码称为返回承诺的函数都将获得当时的英雄。在下面的示例中,someFunction实际上是return new Promise(...),而resultgetHeroes()的输出

someFunction().then(result => this.heroes = result)