381 Stimmen

Kann ich die Pfeilfunktionssyntax von ES6 mit Generatoren verwenden? (Pfeilnotation)

Das heißt, wie drücke ich aus

function *(next) {}

mit Pfeil-Syntax? Ich habe alle Kombinationen ausprobiert, die mir einfielen, und ich konnte keine Dokumentation dazu finden.

(Ich benutze derzeit Node.js v0.11.14.)

8voto

Elmer Punkte 8639

Sie können es, aber nicht wirklich auf nette Weise. Es ist nicht kürzer und sieht nicht so hübsch aus. Überprüfen Sie das:

function* iterable(arg) {
    yield* [];
}

async function* asyncIterable(arg) {
    yield* [];
}

const arrowIterable = arg => {
    return {
        *[Symbol.iterator]() {
            yield* [];
        },
    };
};

const arrowAsyncIterable = arg => {
    return {
        async *[Symbol.asyncIterator]() {
            yield* [];
        },
    };
};

Dies funktioniert, weil ein Iterable im Grunde ein Objekt mit dem Symbol.iterator oder Symbol.asyncIterator ist, das auf einen Iterator gesetzt ist. Ein Generator ist ein Iterator!

Viel Spaß!

3voto

coolreader18 Punkte 711

Ich weiß, dass das sehr spät ist, aber ein weiterer möglicher Grund könnte Syntax sein. Vielleicht funktioniert (*() => {}), aber was ist mit (9 ** () => {})? Ist das 9 hoch eine Pfeilfunktion, die NaN zurückgibt, oder ist es 9 mal eine Generator-Pfeilfunktion, die auch NaN zurückgibt? Es könnte mit einigen alternativen Syntax wie =>* wie von einer anderen Antwort hier erwähnt, gemacht werden, aber vielleicht gab es den Wunsch, die Konsistenz der Generatorfunktionssyntax (z. B. function* () {} und { *genMethod() {} }) zu erhalten, als sie implementiert wurde. Nicht wirklich eine Entschuldigung, aber ein Grund dafür.

-7voto

Es gibt einen schönen Workaround mit redux-saga

import { call, all } from 'redux-saga/effects';

function* gen() {
   yield all([].map(() => {
      return call(....);
   }));
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X