如何在没有异步/等待支持的情况下等待异步javascript函数?

时间:2018-11-19 03:43:03

标签: javascript qtwebengine qtwebchannel

这与从Qt WebkitQt 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)新的浏览器客户端和旧的浏览器客户端同时工作。

欢迎任何提示。预先感谢。

0 个答案:

没有答案