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.