等待第三方非异步功能内的功能

时间:2018-04-04 16:36:15

标签: javascript typescript async-await

async function myAsyncFunc() : Promise<void> {
    // do async stuff
    // ex. delay with promise of setTimout
}

libraryObject.onBeforeDrawOnScreen(function(){
    myAsyncFunc(); // can't "await" or block.
});

如何退出&#39; onBeforeDrawOnScreen&#39;?

图书馆并不关心回调的返回类型或值。 Promise返回没有空间检查,所以它没有等待&#39;等待&#39;在我的卡拉克。 所以我不能添加&#39; async&#39;关于回调的话。

我知道javascript的事件循环,但是...有一个解决方法?

由于

1 个答案:

答案 0 :(得分:0)

我看看你是否能找到一个更好的库,或者 - 如果你使用的库是开源的 - 尝试自己提供异步支持。否则,真的没有办法做到这一点。

你可能会发生所谓的忙等待,你有一个while循环,它会反复检查一些将被解析承诺改变的状态。但是,由于JS的单线程特性,即使这样也行不通。负责让你离开循环的处理程序被阻止,直到你离开循环。 注意:以下内容会导致无限循环,所以实际上不要这样做

libraryObject.onBeforeDrawOnScreen(function(){
    let done = false;
    let error = null;
    myAsyncFunc()
        .then(() => {
            done = true;
        }, (err) => {
            error = err;
            done = true;
        });
    while(!done);
    if (error) throw error;
});

这就是为什么异步支持在许多JS库中如此重要的原因。