我试图通过以下实现掌握async/await,但它并没有按预期工作。
public static async sleep(ms: number): Promise<void> {
await Utilities._sleep(ms);
}
private static _sleep(ms: number): Promise<{}> {
return new Promise((resolve: Function) => setTimeout(resolve, ms));
}
_sleep
会在n毫秒后解析promise,而await
应该在此期间sleep
。
但是我的下面的测试失败了。
it("should sleep for 500 ms", ()=> {
const date1 = (new Date()).getTime();
Utilities.sleep(500);
const date2 = (new Date()).getTime();
chai.expect(date2 - date1).to.least(500);
})
带有消息
sleep should sleep for 500 ms FAILED
AssertionError: expected 2 to be at least 500
我的理解是:
sleep
将等待直到来自_sleep
的承诺被解决(根据setTimeout的设置,它将在500毫秒后解决)。
编辑
mocha
中的测试框架。
Utilities.sleep(500);
时,在测试中您不需要等待结果。详情请见 https://github.com/jasmine/jasmine/issues/923。 - Igorsleep()
方法与_sleep()
相比没有任何优势。它们都返回一个 Promise,在ms
毫秒后解决,并且可以互换使用。 - user3432422