Цитата:
|
можно ли добиться того, чтобы скрипт выполнялся асинхронно, при этом сохраняя последовательный вид кода?
|
Да. Совсем недавно состоялся релиз ES7, в котором появилась конструкция async/await:
main();
async function main() {
await loadPage();
await myAction();
await text("Some text");
await myTextAction();
await loadData("Some filter");
var data = await getData();
alert(data);
}
async function waitToLoad() {};
async function myAction() {};
async function getData() {
let request = await fetch("/api/data");
let data = await request.json();
return data;
}
А если вдруг надо связать код на async/await со старым, то используются обещания:
function interval(ms) { //Если функция возвращает обещание, к ней можно применить await.
return new Promise((resolve, reject) => {
setInterval(resolve, ms);
});
}
await interval(1000);
Собственно, сначала появились обещания, потом генераторы, и только потом, как синтаксический сахар над их связкой, async/await.
А чтобы современный код можно было испольнять в старых браузерах, используется компиляция с помощью
babel.js.
Для чтения:
https://developer.mozilla.org/ru/doc...bjects/Promise
https://learn.javascript.ru/es-modern-usage