Синхронная загрузка файлов в Javascript с оператором ожидания

Недавно я прочитал, что в Javascript есть оператор await для ожидания объекта Promise, возвращаемого асинхронной функцией.

Моя цель — использовать только функции, предоставляемые стандартным Javascript, без необходимости использования каких-либо внешних библиотек. Итак, мой вопрос: как я могу эффективно использовать оператор await для последовательного извлечения данных с сервера (один файл за другим)?


person Fernando    schedule 27.02.2017    source источник
comment
await не делает ваш код синхронным. Это позволяет вам писать код, который выглядит синхронно (и поэтому, возможно, его легче выполнять). Если вы хотите извлекать файлы последовательно, вы просто await выбираете последовательно: var a = await fetchFile(...); var b = await fetchFile(...); ....   -  person Felix Kling    schedule 27.02.2017
comment
Все, что вам нужно, — это Fetch API.   -  person Ry-♦    schedule 27.02.2017


Ответы (1)


Мне удалось получить то, что я искал. Первый шаг — создать async function, а затем поместить весь ваш код, который вам нужно выполнить, как если бы он был синхронным, внутри этой функции. Вот фрагмент кода для этого:

<html>
<body>
</body>
</html>

<script>

var fileList = [ 
'test_1.txt', 
'test_2.txt',
'test_3.txt',
'test_4.txt',
'test_5.txt'
];

async function loadFiles() 
{
    for (i = 0; i < fileList.length; i++)
    {
        await fetch(fileList[i]).then(function(response){
            return response.text();
        }).then(function (text){
            console.log(text);
        });
        console.log("loaded " + fileList[i]);
    }
}

loadFiles();

</script>

При этом все файлы будут загружаться один за другим. В наши дни это довольно удивительно, поскольку в javascript легко управлять последовательными задачами, которые раньше выполнялись асинхронно.

person Fernando    schedule 27.02.2017