Penerjemahan ini sedang berlangsung.

Keywordyield digunakan untuk menghentikan sementara dan melanjutkan sebuah fungsi generator (function* atau legacy generator function).

Syntax

[rv] = yield [expression];
expression
Mendefeniskan nilai yang akan dikembalikan melalui iterator protocol. Apabila diabaikan, maka undefined akan dikembalikan.
rv

Mengembalikan nilai opsional yang diberikan pada generator method next() untuk melanjutkan eksekusinya.

Deskripsi

Keyword yieldmenghentikan secara sementara eksekusi dari fungsi generator dan nilai setelah keyword yield dikembalikan pada pemanggil generator tersebut. yield bisa juga disebut sebagai versi generator dari keywordreturn.

Keyword yield sebenarnya mengembalikan sebuah obyek IteratorResult dengan dua properti, value dan done. Propertivalue adalah hasi dari evaluasi ekspresi yield, dan done yang false, mengindikasikan bahwa fungsi generator tersebut belum selesai sepenuhnya.

Sekali berhenti pada ekspresi yield , eksekusi dari code generator tersebut akan terus dihentikan sampai generator method next() dipanggil. Setiap kali method generator next() dipanggil, generator melanjutkan eksekusi dan berjalan hingga mencapai salah satu dari kondisi berikut ini :

  • Sebuahyield, yang menyebabkan generator sekali lagi berhenti sementara dan mengembalikan nilai baru dari generator tersebut. Ketika kemudiannext() dipanggil lagi, eksekusi berlanjut dengan statement segera setelahyield.
  • throw digunakan untuk melontarkan exception dari generator. Ini menghentikan generator sepenuhnya, dan eksekusi berlanjut pada pemanggil seperti normalnya ketika sebuah exception dilontarkan.
  • Akhir dari fungsi generator tersebut tercapai; pada kasus ini, eksekusi dari generator tersebut berakhir dan sebuah IteratorResult dikembalikan pada pemanggilnya dimana value adalah undefined dan done adalah true.
  • Mencapai sebuah statement return. Pada kasus ini, eksekusi dari generator tersebut berakhir dan sebuah IteratorResult dikembalikan pada pemanggil dimana value ditentukan oleh statement return dan done adalah true.

JIka sebuah nilai opsional diberikan pada generator method next(), nilai tersebut menjadi nilai yang dikembalikan oleh operasi yield dari generator pada saat itu.

Di antara kode generator, operatoryield -nya, dan kemampuan untuk menentukan sebua nilai awal baru dengan memberikannya pada Generator.prototype.next(), generator menawarkan power dan kontrol yang luar biasa.

Contoh

Kode berikut merupakan deklarasi dari sebuah contoh fungsi generator.

function* countAppleSales () {
  var saleList = [3, 7, 5];
  for (var i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}

Setelah sebuah fungsi generator didefenisikan, maka fungsi tersebut dapat digunakan untuk menghasilkan sebuah iterator seperti berikut.

var appleStore = countAppleSales(); // Generator { }
console.log(appleStore.next()); // { value: 3, done: false }
console.log(appleStore.next()); // { value: 7, done: false }
console.log(appleStore.next()); // { value: 5, done: false }
console.log(appleStore.next()); // { value: undefined, done: true }

Spesifikasi

Spesifikasi Status Komentar
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Yield' in that specification.
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Yield' in that specification.
Living Standard  

Kompatabilitas Browser

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support39 (Yes)261 No (Yes)10
IteratorResult object instead of throwing ? ?29 No ?10
FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support3939 (Yes)261 No (Yes)10
IteratorResult object instead of throwing ? ? ?29 No ?10

1. Starting with Firefox 33, the parsing of the yield expression has been updated to conform with the ES2015 specification.

Catatan Firefox-specific

  • Semenjak Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), the completed generator function no longer throws a TypeError "generator has already finished". Instead, it returns an IteratorResult object like { value: undefined, done: true } (bug 958951).
  • Starting with Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30), the parsing of the yield expression has been updated to conform with the ES2015 specification (bug 981599):
    • The expression after the yield keyword is optional and omitting it no longer throws a SyntaxError: function* countAppleSales() { yield; }

Lihat juga

Tag Dokumen dan Kontributor

 Kontributor untuk laman ini: tangorboyz
 Terakhir diperbarui oleh: tangorboyz,