【发布时间】:2019-03-22 12:52:01
【问题描述】:
这是我的代码:
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”。你能帮帮我吗?
条件:我们不能通过用户或库(mainlib,sublib)更改代码。我们只需更改mylibwrapper 中的代码或包装/模拟fn,然后再传递给mainlib。
【问题讨论】:
-
您的代码有什么问题?
mainlib不返回承诺吗?如果是这样,mainlib是如何工作的? -
@ChrisBrownie55:我更新了问题。所有
async函数都返回承诺。在这种情况下,我只想控制我的代码mylibwrapper以等待fn完成,然后再将控制权返回给用户,但我不知道如何。 -
好的,@y2bd 似乎已经回答了您的问题,但如果您可以等待
fn,您可能不应该有sublib或mylibwrapper。
标签: javascript async-await es6-promise