Это что-то связанное с портированием с Qt Webkit
на Qt Webengine
.Следующий код хорошо работает в webkit.
<script type="text/javascript">
var result = objectExposedFromC++.someFunction(); //sync;
console.log("I want to use result here");
</script>
Но в webengine все изменилось.
<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 без поддержки async / await? С этим я могу
(1) не нужно изменять какой-либо существующий js-код.Клиент браузера может вводить новый код js для изменения поведения асинхронных функций.
(2) новый клиент браузера и старый клиент браузера работают одновременно.
Любые советы приветствуются.Заранее спасибо.