javascript / expert
Snippet
Bidirektionale Steuerung und Zustandsinjektion mit Generator-Funktionen
Generator-Funktionen ermöglichen eine bidirektionale Kommunikation zwischen dem Aufrufer und dem Funktionskörper. Neben dem Ausgeben von Zwischenzuständen empfangen Generatoren externe Daten beim Aufruf von .next(wert), wodurch der yield-Ausdruck durch diesen Wert ersetzt wird. Aufrufer können auch Laufzeitfehler über .throw(fehler) in den Generator injizieren.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function* taskRunner(initialState) {try {const step1 = yield { status: 'PENDING', data: initialState };const step2 = yield { status: 'PROCESSING', data: step1.toUpperCase() };return { status: 'COMPLETED', result: step2 * 2 };} catch (error) {yield { status: 'FAILED', error: error.message };}}const gen = taskRunner('hello');console.log(gen.next().value);console.log(gen.next('world').value);console.log(gen.next(21).value);
nodejs
Erklärung
1
function* taskRunner(initialState)
Definiert eine Generator-Funktion, die die Ausführung an jedem yield-Ausdruck anhält.
2
const step1 = yield { ... }
Hält die Ausführung an, gibt das Objekt aus und weist das Argument des nächsten .next(val)-Aufrufs step1 zu.
3
yield { status: 'FAILED', error: error.message }
Gibt einen Wiederherstellungszustand aus, wenn über gen.throw() ein Fehler injiziert wird.
4
gen.next('world')
Setzt den Generator fort und übergibt 'world' als Auswertungsergebnis des ersten yield-Ausdrucks nach innen.