Javascript 第三方非异步函数中的等待函数 异步函数myAsyncFunc():Promise{ //做异步的事情 //例:延期并承诺延期 } libraryObject.onBeforeDrawOnScreen(函数(){ myAsyncFunc();//无法“等待”或阻止。 });
如何在退出“onBeforeDrawOnScreen”之前等待 库不关心回调的返回类型或值。承诺回报没有空间支票,所以它不会在我的callack上“等待”。 所以我不能在回调中添加“async”字 我知道javascript的事件循环,但是。。。有解决办法吗Javascript 第三方非异步函数中的等待函数 异步函数myAsyncFunc():Promise{ //做异步的事情 //例:延期并承诺延期 } libraryObject.onBeforeDrawOnScreen(函数(){ myAsyncFunc();//无法“等待”或阻止。 });,javascript,typescript,async-await,Javascript,Typescript,Async Await,如何在退出“onBeforeDrawOnScreen”之前等待 库不关心回调的返回类型或值。承诺回报没有空间支票,所以它不会在我的callack上“等待”。 所以我不能在回调中添加“async”字 我知道javascript的事件循环,但是。。。有解决办法吗 谢谢我想看看你是否能找到更好的库,或者——如果你正在使用的库是开源的——试着自己贡献异步支持。否则,真的没有办法做到这一点 您可能会想到执行所谓的忙等待,即有一个while循环,该循环反复检查某些状态,这些状态将由解析承诺更改。但是,由于J
谢谢我想看看你是否能找到更好的库,或者——如果你正在使用的库是开源的——试着自己贡献异步支持。否则,真的没有办法做到这一点 您可能会想到执行所谓的忙等待,即有一个while循环,该循环反复检查某些状态,这些状态将由解析承诺更改。但是,由于JS的单线程特性,即使这样也不起作用。负责让您脱离循环的处理程序会被阻塞,直到您脱离循环注意:以下操作将导致无限循环,因此不要实际执行该操作:
async function myAsyncFunc() : Promise<void> {
// do async stuff
// ex. delay with promise of setTimout
}
libraryObject.onBeforeDrawOnScreen(function(){
myAsyncFunc(); // can't "await" or block.
});
这就是为什么异步支持在许多JS库中如此重要。我认为唯一的方法是
libraryObject
为“在屏幕上绘制”
事件提供一些取消机制。不,这是不可能的。向库提交一份关于异步的bug报告,或者选择另一个第三方。这是一个坏主意的三个原因都是次要的。你不应该这样做-不能这样做-因为它根本不起作用。这是一个无限循环,没错。设置done
变量的承诺处理程序永远不会被调用,因为在函数退出之前无法调用它们。我可能应该在发布它之前尝试一下。
libraryObject.onBeforeDrawOnScreen(function(){
let done = false;
let error = null;
myAsyncFunc()
.then(() => {
done = true;
}, (err) => {
error = err;
done = true;
});
while(!done);
if (error) throw error;
});