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