异步/等待清晰度,有睡眠示例

hr-*_*tis 3 mocha.js async-await typescript es6-promise ecmascript-2017

我试图通过以下实现获得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));
    }
Run Code Online (Sandbox Code Playgroud)

_sleep将在n毫秒后解决承诺,等待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);
})
Run Code Online (Sandbox Code Playgroud)

与消息

 sleep should sleep for 500 ms FAILED
    AssertionError: expected 2 to be at least 500
Run Code Online (Sandbox Code Playgroud)

我的理解是:sleep将等待,直到承诺来_sleep解决(根据setTimeout将在500ms后解决)

编辑

中的测试框架 mocha

uni*_*nal 5

您还没有等待sleep()通话(如用户@igor在您的问题评论中所述):

简化版:

async function sleep(ms: number) {
    await _sleep(ms);
}

function _sleep(ms: number) {
    return new Promise((resolve) => setTimeout(resolve, ms));
}

console.time('start')
sleep(500).then(() => {
    console.timeEnd('start')
})

// If your test runner supports async:
it("should sleep for 500 ms", async () => {
    const date1 = (new Date()).getTime();
    await sleep(500);
    const date2 = (new Date()).getTime();
    chai.expect(date2 - date1).to.least(500);
})
Run Code Online (Sandbox Code Playgroud)