我对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提前!
答案 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(...)
,而result
是getHeroes()
的输出
someFunction().then(result => this.heroes = result)