Сборка от 17 марта 2017 г


Загрузить массив последовательно



Download 9,9 Mb.
bet281/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   277   278   279   280   281   282   283   284   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Загрузить массив последовательно


Есть массив URL:


'use strict';


let urls = [ 'user.json', 'guest.json'


];

Напишите код, который все URL из этого массива загружает – один за другим (последовательно), и сохраняет в результаты в массиве results , а потом выводит.


Вариант с параллельной загрузкой выглядел бы так:


Promise.all( urls.map(httpGet) )


.then(alert);

В этой задаче загрузку нужно реализовать последовательно. Открыть песочницу для задачи.


К решению

Генераторы


Генераторы – новый вид функций в современном JavaScript. Они отличаются от обычных тем, что могут приостанавливать своё выполнение, возвращать промежуточный результат и далее возобновлять его позже, в произвольный момент времени.




Создание генератора


Для объявления генератора используется новая синтаксическая конструкция: function* (функция со звёздочкой). Её называют «функция‑генератор» (generator function).


Выглядит это так:
function* generateSequence() { yield 1;
yield 2;
return 3;
}

При запуске generateSequence() код такой функции не выполняется. Вместо этого она возвращает специальный объект, который как раз и называют


«генератором».

// generator function создаёт generator let generator = generateSequence();


Правильнее всего будет воспринимать генератор как «замороженный вызов функции»:




При создании генератора код находится в начале своего выполнения.


Основным методом генератора является next() . При вызове он возобновляет выполнение кода до ближайшего ключевого слова yield . По достижении yield выполнение приостанавливается, а значение – возвращается во внешний код:


function* generateSequence() { yield 1;


yield 2;
return 3;
}


let generator = generateSequence();
let one = generator.next(); alert(JSON.stringify(one)); // {value: 1, done: false}

Повторный вызов generator.next() возобновит выполнение и вернёт результат следующего yield :


let two = generator.next(); alert(JSON.stringify(two)); // {value: 2, done: false}


И, наконец, последний вызов завершит выполнение функции и вернёт результат return :




let three = generator.next(); alert(JSON.stringify(three)); // {value: 3, done: true}

Функция завершена. Внешний код должен увидеть это из свойства done:true и обработать value:3 , как окончательный результат.


Новые вызовы generator.next() больше не имеют смысла. Впрочем, если они и будут, то не вызовут ошибки, но будут возвращать один и тот же объект: {done: true} .
«Открутить назад» завершившийся генератор нельзя, но можно создать новый ещё одним вызовом generateSequence() и выполнить его.




Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   277   278   279   280   281   282   283   284   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish