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的事件循环,但是...有一个解决方法?
由于
答案 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库中如此重要的原因。