我关注的tutorial具有此功能(其中Hero
是一个类,HEROES
是一个数组):
@Injectable()
export class HeroService {
getHeroes(): Promise<Hero[]> {
return Promise.resolve(HEROES);
}
}
现在它想要模拟慢速连接并定义:
getHeroesSlowly(): Promise<Hero[]> {
return new Promise(resolve => {
// Simulate server latency with 2 second delay
setTimeout(() => resolve(this.getHeroes()), 2000);
});
}
它使用new
,但没有解释为什么它现在创建一个新的Promise
,而它之前没有这样做。有什么想法吗?
答案 0 :(得分:1)
它返回一个新的Promise,以便模拟HttpServer
调用,每次调用该方法时,这将是一个新调用。这通常需要时间。
如果我们不使用新承诺,先前的承诺将得到解决并立即返回值。
答案 1 :(得分:1)
已经定义了HEROES。数据可用,因此您可以立即返回:Promise.resolve(HEROES);
。
新的Promise用于在稍后阶段解析数据。 (在你的例子中2秒后)。
答案 2 :(得分:1)
他们只是使用Promise构造函数来定义特定的resolve()
函数。这是JS中的样子:
return new Promise(function (resolve) {
setTimeout(function () { return resolve(_this.nextQuote()); }, 500);
});
您还可以在ES6库中看到PromiseConstructor的定义:
interface PromiseConstructor {
/**
* A reference to the prototype.
*/
readonly prototype: Promise<any>;
/**
* Creates a new Promise.
* @param executor A callback used to initialize the promise. This callback is passed two arguments:
* a resolve callback used resolve the promise with a value or the result of another promise,
* and a reject callback used to reject the promise with a provided reason or error.
*/
new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;
...
}