这与从Qt Webkit
到Qt Webengine
的移植有关。
以下代码在webkit中效果很好。
<script type="text/javascript">
var result = objectExposedFromC++.someFunction(); //sync;
console.log("I want to use result here");
</script>
但是Web引擎中的情况发生了变化。
<script type="text/javascript">
var result = objectExposedFromC++.someFunction(); //async;
console.log("I want to use result here, but result isn't avaiable");
</script>
使其工作的一种方法如下所示。
<script type="text/javascript">
var result = objectExposedFromC++.someFunction(function(returnValue){// callback after async return;
console.log("I can use returnValue now.");
}); //async
//other code execute before callback;
</script>
但是js代码数以万计,一旦更改,旧的浏览器客户端将无法工作。 我只想拨打异步电话来同步通话。
当我找到async/await in ES7
时,情况会变好,但这不是解决方案。
<script type="text/javascript">
(async function(){
//async_fucntion will call objectExposedFromC++.someFunction() finally;
var result = await async_fucntion();
console.log("I can use returnValue now.");
})()
</script>
<script type="text/javascript">
(async function(){
//other js code that call async fucntion too.
})()
</script>
```
如您所见,
(1)我必须将我的所有js代码 async 进行 sync 同步,导致订单脚本混乱。
(2)基于qt webkit的旧浏览器客户端也不起作用,因为它可能不支持async/await
。
那么,如何在没有异步/等待支持的情况下等待异步javascript函数? 这样我可以
(1)不需要更改任何现有的js代码。浏览器客户端可以注入新的js代码以更改异步功能行为。
(2)新的浏览器客户端和旧的浏览器客户端同时工作。
欢迎任何提示。预先感谢。