Показать сообщение отдельно
  #6 (permalink)  
Старый 27.06.2016, 08:10
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
можно ли добиться того, чтобы скрипт выполнялся асинхронно, при этом сохраняя последовательный вид кода?
Да. Совсем недавно состоялся релиз 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
Ответить с цитированием