Anhang B. Erweiterte Async-Muster
In Anhang A wurde die Asynquence-Bibliothek für sequenzorientierte asynchrone Ablaufsteuerung vorgestellt, die hauptsächlich auf Promises und Generatoren basiert.
Jetzt werden wir andere fortgeschrittene asynchrone Muster erkunden, die auf diesem bestehenden Verständnis und dieser Funktionalität aufbauen, und sehen, wie Asynquencediese ausgefeilten asynchronen Techniken einfach in unseren Programmen mischen und anpassen kann, ohne viele separate Bibliotheken zu benötigen.
Iterierbare Sequenzen
Wir haben die iterierbaren Sequenzen von asynquenceim vorherigen Anhang vorgestellt, aber wir wollen sie noch einmal genauer betrachten.
Zur Auffrischung: Erinnere dich:
var
domready
=
ASQ
.
iterable
();
// ..
domready
.
val
(
function
(){
// DOM is ready
}
);
// ..
document
.
addEventListener
(
"DOMContentLoaded"
,
domready
.
next
);
Definieren wir nun eine Folge von mehreren Schritten als iterierbare Folge:
var
steps
=
ASQ
.
iterable
();
steps
.
then
(
function
STEP1
(
x
){
return
x
*
2
;
}
)
.
steps
(
function
STEP2
(
x
){
return
x
+
3
;
}
)
.
steps
(
function
STEP3
(
x
){
return
x
*
4
;
}
);
steps
.
next
(
8
).
value
;
// 16
steps
.
next
(
16
).
value
;
// 19
steps
.
next
(
19
).
value
;
// 76
steps
.
next
().
done
;
// true
Wie du sehen kannst, ist eine iterierbare Sequenz ein standardkonformer Iterator (siehe Kapitel 4). Sie kann also mit einer ES6 for..of
Schleife iteriert werden, genau wie ein Generator (oder jede andere Iterable):
var
steps
=
ASQ
.
iterable
();
steps
.
then
(
function
STEP1
(){
return
Get Du kennst JS nicht: Asynchronität und Leistung now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.