Heim > Web-Frontend > js-Tutorial > Grundlegende Verwendung des ES6-Generators

Grundlegende Verwendung des ES6-Generators

Guanhui
Freigeben: 2020-06-24 18:05:58
nach vorne
2401 Leute haben es durchsucht

Grundlegende Verwendung des ES6-Generators

Die Beispiele in diesem Artikel beschreiben die grundlegende Verwendung des ES6-Generators. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1 Einführung in den Generator

Werfen wir zunächst einen Blick auf den Grundcode des Generators

function* g(){
 yield 100;
 yield 200;
 return 300;
}
let gg = g();
console.log(gg);            // Object [Generator] {}
console.log(gg.next());        // { value: 100, done: false }
console.log(gg.next());        // { value: 200, done: false }
console.log(gg.next());        // { value: 300, done: true }
console.log(gg.next());        // { value: undefined, done: true }
Nach dem Login kopieren

Zuerst wir sehen:

  • Generator wird durch functinon* definiert, und yield kann innerhalb des Generators verwendet werden

  • Generator ist keine Funktion, sondern eine Objekt und wechselt zu Beginn der Ausführung in den Pausenzustand. Anstatt alle Vorgänge

  • direkt auszuführen, um den nächsten Vorgang über next() auszuführen, haben die Rückgaben alle die Form { value: xxx, done: xxx }, und value stellt das letzte Mal dar. Der von der Operation zurückgegebene Wert done hat zwei Werte, einer ist wahr und der andere ist falsch, was angibt, ob der gesamte Prozess abgeschlossen ist.

2. Generator-Asynchronprogrammierung

Generator ist eine in ES6 eingeführte asynchrone Lösung, um deren Unterschiede zu erkennen.

// 这里模拟了一个异步操作
function asyncFunc(data) {
 return new Promise( resolve => {
  setTimeout(
   function() {
    resolve(data)
   },1000
  )
 })
}
Nach dem Login kopieren

Promise-Verarbeitungsmethode:

asyncFunc("abc").then( res => {
 console.log(res);                    // "abc"
 return asyncFunc("def")
}).then( res => {
 console.log(res);                    // "def"
 return asyncFunc("ghi")
}).then( res => {
 console.log(res);                    // "ghi"
})
Nach dem Login kopieren

Generator-Verarbeitungsmethode:

function* g() {
 const r1 = yield asyncFunc("abc");
 console.log(r1);                            // "abc"
 const r2 = yield asyncFunc("def");
 console.log(r2);                            // "def"
 const r3 = yield asyncFunc("ghi");
 console.log(r3);                            // "ghi"
}

let gg = g();
let r1 = gg.next();
r1.value.then(res => {
 let r2 = gg.next(res);
 r2.value.then(res => {
  let r3 = gg.next(res);
  r3.value.then(res => {
   gg.next(res)
  })
 })
})
Nach dem Login kopieren

Promise-Mehrfachrückrufe scheinen komplizierter zu sein und der Code ist nicht prägnant genug Verarbeitung Der scheinbar synchrone Code ist tatsächlich eine asynchrone Operation. Das einzige ist, dass die Verarbeitung relativ kompliziert ist. Wenn nur eine asynchrone Operation ausgeführt wird, ist ein Generator besser geeignet.

3.yield und yield*

Sehen wir uns zunächst zwei Codeteile an

function* g1() {
 yield 100;
 yield g2();
 return 400;
}

function* g2() {
 yield 200;
 yield 300;
}

let gg = g1();
console.log(gg.next());                // { value: 100, done: false }
console.log(gg.next());                // { value: Object [Generator] {}, done: false }
console.log(gg.next());                // { value: 400, done: true }
console.log(gg.next());                // { value: undefined, done: true }
Nach dem Login kopieren
rrree

yield durchläuft keinen anderen Generator und gibt ein Iteratorobjekt zurück, während yield *The Der Generator wird durchlaufen und iteriert.

Empfohlenes Tutorial: „JS-Tutorial

Das obige ist der detaillierte Inhalt vonGrundlegende Verwendung des ES6-Generators. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
es6
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage