如何强制异步功能等到另一个功能完成?

时间:2019-03-22 04:36:43

标签: javascript async-await es6-promise

这是我的代码:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function user() {
    await mylibwrapper(async () => {
        await sleep(1110); // take long time to done
        console.log("fn");
    })
    // This out put must be after fn. How?
    console.log("user");
}
async function mylibwrapper(fn) {
    // We can wrap or mock fb before pass to mainlib
    await mainlib(fn);
    // How to wait until fn be called and finished? Then we can return and let the caller continue
    console.log("mylibwrapper");
}
async function mainlib(fn) {
    await sublib(fn);
}
async function sublib(fn) {
    fn();
}
user();

我正在为用户包装一个库。如何强制mylibwrapper等待回调fn完成,然后再将结果返回给用户?
输出:

mylibwrapper
user
fn

控制台输出的预期结果是“ user”之前的“ fn”。你能帮我吗?

条件:我们无法按用户或库(主库,子库)更改代码。我们只是可以在传递给mylibwrapper之前在fn中更改代码或包装/模拟mainlib

1 个答案:

答案 0 :(得分:0)

您需要在await fn()之内sublib()。如果您要等待它们完成,就需要等待所有的承诺。