Fonksiyon örneklerinin aksine, bir AsyncGeneratorFunction'ın "prototype" özelliğinin değeri olan nesne, değeri AsyncGeneratorFunction örneği olan bir "constructor" özelliğine sahip değildir.
# 27.5 Generator Nesneleri (Generator Objects)
Bir Generator, bir jeneratör fonksiyonu çağrılarak oluşturulur ve hem yineleyici arayüzüne (iterator interface) hem de yinelenebilir arayüze (iterable interface) uygundur.
Generator örnekleri, kendilerini oluşturan jeneratör fonksiyonunun "prototype" özelliğinin ilk değerinden doğrudan özellikler miras alır. Generator örnekleri dolaylı olarak %GeneratorPrototype% nesnesinden özellikler miras alır.
# 27.5.1 %GeneratorPrototype% Nesnesi (The %GeneratorPrototype% Object)
%GeneratorPrototype% nesnesi:
%GeneratorFunction.prototype.prototype% nesnesidir.
bir sıradan nesnedir (ordinary object) .
bir Generator örneği değildir ve bir [[GeneratorState]] dahili yuvasına sahip değildir.
değeri %Iterator.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.
tüm Generator örnekleri tarafından dolaylı olarak miras alınan özelliklere sahiptir.
# 27.5.1.1 %GeneratorPrototype%.constructor
%GeneratorPrototype% .constructor özelliğinin ilk değeri %GeneratorFunction.prototype% nesnesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.5.1.2 %GeneratorPrototype%.next ( value )
? GeneratorResume (this değeri, value , empty) döndür.
# 27.5.1.3 %GeneratorPrototype%.return ( value )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
gen , this değeri olsun.
completion , ReturnCompletion (value ) olsun.
? GeneratorResumeAbrupt (gen , completion , empty) döndür.
# 27.5.1.4 %GeneratorPrototype%.throw ( exception )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
gen , this değeri olsun.
completion , ThrowCompletion (exception ) olsun.
? GeneratorResumeAbrupt (gen , completion , empty) döndür.
# 27.5.1.5 %GeneratorPrototype% [ %Symbol.toStringTag% ]
%Symbol.toStringTag% özelliğinin ilk değeri "Generator" dizesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.5.2 Generator Örneklerinin Özellikleri (Properties of Generator Instances)
Generator örnekleri başlangıçta Tablo 89 içinde açıklanan dahili yuvalarla oluşturulur.
Tablo 89: Generator Örneklerinin Dahili Yuvaları
# 27.5.3 Generator Soyut İşlemleri (Generator Abstract Operations)
# 27.5.3.1 GeneratorStart ( gen , genBody )
GeneratorStart soyut işlemi; gen (bir Generator) ve genBody (parametresiz bir FunctionBody Ayrıştırma Düğümü (Parse Node) veya [Soyut Kapanış (Abstract Closure)]) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[GeneratorState]] değeri suspended-start'tır.
genContext , çalışan yürütme bağlamı (running execution context) olsun.
genContext nesnesinin Generator bileşenini gen olarak ayarla.
closure , genBody değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Soyut Kapanış (Abstract Closure) olsun:
acGenContext , çalışan yürütme bağlamı (running execution context) olsun.
acGen , acGenContext nesnesinin Generator bileşeni olsun.
Eğer genBody bir Ayrıştırma Düğümü (Parse Node) ise, o zaman
result , Completion (genBody için Değerlendirme (Evaluation) ) olsun.
Değilse,
Assert : genBody parametresiz bir Soyut Kapanış (Abstract Closure) 'tır.
result , Completion (genBody ()) olsun.
Assert : Buraya geri dönülürse, jeneratör ya bir istisna fırlatmıştır ya da örtük veya açık bir geri dönüş gerçekleştirmiştir.
acGenContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
acGen .[[GeneratorState]] değerini completed olarak ayarla.
NOTE : Bir jeneratör completed durumuna girdikten sonra bu durumdan asla çıkmaz ve onunla ilişkili yürütme bağlamı (execution context) hiçbir zaman yeniden başlatılmaz. acGen ile ilişkili herhangi bir yürütme durumu bu noktada atılabilir.
Eğer result bir olağan tamamlanma (normal completion) ise, o zaman
resultValue , undefined olsun.
Else if result bir dönüş tamamlanması (return completion) ise, o zaman
resultValue , result .[[Value]] olsun.
Değilse,
Assert : result bir fırlatma tamamlanması (throw completion) 'tır.
? result döndür.
NormalCompletion (CreateIteratorResultObject (resultValue , true)) döndür.
genContext bağlamının kod değerlendirme durumunu, o yürütme bağlamı (execution context) için değerlendirme yeniden başlatıldığında, closure parametresiz olarak çağrılacak şekilde ayarla.
gen .[[GeneratorContext]] değerini genContext olarak ayarla.
unused döndür.
# 27.5.3.2 GeneratorValidate ( gen , genBrand )
GeneratorValidate soyut işlemi; gen (bir ECMAScript dil değeri (ECMAScript language value) ) ve genBrand (bir Dize veya empty) argümanlarını alır ve suspended-start, suspended-yield veya completed değerlerinden birini içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
? RequireInternalSlot (gen , [[GeneratorState]] ) işlemini gerçekleştir.
? RequireInternalSlot (gen , [[GeneratorBrand]] ) işlemini gerçekleştir.
Eğer gen .[[GeneratorBrand]] değeri genBrand değilse, bir TypeError istisnası fırlat.
Assert : gen , bir [[GeneratorContext]] dahili yuvasına sahiptir.
state , gen .[[GeneratorState]] olsun.
Eğer state executing ise, bir TypeError istisnası fırlat.
state döndür.
# 27.5.3.3 GeneratorResume ( gen , value , genBrand )
GeneratorResume soyut işlemi; gen (bir ECMAScript dil değeri (ECMAScript language value) ), value (bir ECMAScript dil değeri (ECMAScript language value) veya empty) ve genBrand (bir Dize veya empty) argümanlarını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
state , ? GeneratorValidate (gen , genBrand ) olsun.
Eğer state completed ise, CreateIteratorResultObject (undefined, true) döndür.
Assert : state değeri ya suspended-start ya da suspended-yield'dır.
genContext , gen .[[GeneratorContext]] olsun.
gen .[[GeneratorState]] değerini executing olarak ayarla.
Dönüş değeri: ? RunSuspendedContext (genContext , NormalCompletion (value )).
# 27.5.3.4 GeneratorResumeAbrupt ( gen , abruptCompletion , genBrand )
GeneratorResumeAbrupt soyut işlemi; gen (bir ECMAScript dil değeri (ECMAScript language value) ), abruptCompletion (bir dönüş tamamlanması veya bir fırlatma tamamlanması) ve genBrand (bir Dize veya empty) argümanlarını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
state , ? GeneratorValidate (gen , genBrand ) olsun.
Eğer state suspended-start ise, o zaman
gen .[[GeneratorState]] değerini completed olarak ayarla.
NOTE : Bir jeneratör completed durumuna girdikten sonra bu durumdan asla çıkmaz ve onunla ilişkili yürütme bağlamı (execution context) hiçbir zaman yeniden başlatılmaz. gen ile ilişkili any yürütme durumu bu noktada atılabilir.
state değerini completed olarak ayarla.
Eğer state completed ise, o zaman
Eğer abruptCompletion bir dönüş tamamlanması (return completion) ise, o zaman
Return CreateIteratorResultObject (abruptCompletion .[[Value]] , true).
? abruptCompletion döndür.
Assert : state değeri suspended-yield'dır.
genContext , gen .[[GeneratorContext]] olsun.
gen .[[GeneratorState]] değerini executing olarak ayarla.
Dönüş değeri: ? RunSuspendedContext (genContext , abruptCompletion ).
# 27.5.3.5 GetGeneratorKind ( )
GetGeneratorKind soyut işlemi hiçbir argüman almaz ve non-generator, sync veya async döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
genContext , çalışan yürütme bağlamı (running execution context) olsun.
Eğer genContext bir Generator bileşenine sahip değilse, non-generator döndür.
gen , genContext nesnesinin Generator bileşeni olsun.
Eğer gen bir [[AsyncGeneratorState]] dahili yuvasına sahipse, async döndür.
sync döndür.
# 27.5.3.6 GeneratorYield ( iteratorResult )
GeneratorYield soyut işlemi; iteratorResult (bir IteratorResult arayüzüne uyan bir Nesne) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir ani tamamlanma (abrupt completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
genContext , çalışan yürütme bağlamı (running execution context) olsun.
Assert : genContext , bir jeneratörün yürütme bağlamıdır (execution context) .
gen , genContext nesnesinin Generator bileşeninin değeri olsun.
Assert : GetGeneratorKind () değeri sync'dir.
gen .[[GeneratorState]] değerini suspended-yield olarak ayarla.
genContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
callerContext , çalışan yürütme bağlamı (running execution context) olsun.
NormalCompletion (iteratorResult ) geçirerek callerContext bağlamını yeniden başlat. Eğer genContext daha sonra tekrar yeniden başlatılırsa, resumptionValue , yeniden başlatıldığı Tamamlanma Kaydı (Completion Record) olsun.
Assert : Denetim buraya ulaşırsa, o zaman genContext yine çalışan yürütme bağlamıdır (running execution context) .
resumptionValue döndür.
# 27.5.3.7 Yield ( arg )
Yield soyut işlemi; arg (bir ECMAScript dil değeri (ECMAScript language value) ) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir ani tamamlanma (abrupt completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
genKind , GetGeneratorKind () olsun.
Eğer genKind async ise, ? AsyncGeneratorYield (? Await (arg )) döndür.
? GeneratorYield (CreateIteratorResultObject (arg , false)) döndür.
# 27.5.3.8 CreateIteratorFromClosure ( closure , genBrand , genProto [ , extraSlots ] )
CreateIteratorFromClosure soyut işlemi; closure (parametresiz bir [Soyut Kapanış (Abstract Closure)]), genBrand (bir Dize veya empty) ve genProto (bir Nesne) argümanlarını ve isteğe bağlı extraSlots (dahili yuva adlarının bir Listesi (List) ) argümanını alır ve bir Generator. Çağrıldığında aşağıdaki adımları gerçekleştirir:
NOTE : closure , bir IteratorResult nesnesi üretmek için Yield işleminin kullanımlarını içerebilir.
Eğer extraSlots mevcut değilse, extraSlots değerini yeni ve boş bir Liste (List) olarak ayarla.
internalSlotsList , extraSlots ile « [[GeneratorState]] , [[GeneratorContext]] , [[GeneratorBrand]] » listesinin liste birleşimi (list-concatenation) olsun.
gen , OrdinaryObjectCreate (genProto , internalSlotsList ) olsun.
gen .[[GeneratorBrand]] değerini genBrand olarak ayarla.
gen .[[GeneratorState]] değerini suspended-start olarak ayarla.
callerContext , çalışan yürütme bağlamı (running execution context) olsun.
calleeContext , yeni bir yürütme bağlamı (execution context) olsun.
calleeContext nesnesinin Function bileşenini null olarak ayarla.
calleeContext nesnesinin Realm bileşenini geçerli Realm Kaydı (the current Realm Record) olarak ayarla.
calleeContext nesnesinin ScriptOrModule bileşenini callerContext nesnesinin ScriptOrModule bileşeni olarak ayarla.
Eğer callerContext zaten askıya alınmamışsa, callerContext bağlamını askıya al.
calleeContext bağlamını yürütme bağlamı yığınına (execution context stack) it; calleeContext artık çalışan yürütme bağlamıdır (running execution context) .
GeneratorStart (gen , closure ) işlemini gerçekleştir.
calleeContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve callerContext bağlamını çalışan yürütme bağlamı (running execution context) olarak geri yükle.
gen döndür.
# 27.6 AsyncGenerator Nesneleri (AsyncGenerator Objects)
Bir AsyncGenerator, bir asenkron jeneratör fonksiyonu çağrılarak oluşturulur ve hem asenkron yineleyici arayüzüne (async iterator interface) hem de asenkron yinelenebilir arayüze (async iterable interface) uygundur.
AsyncGenerator örnekleri, kendilerini oluşturan asenkron jeneratör fonksiyonunun "prototype" özelliğinin ilk değerinden doğrudan özellikler miras alır. AsyncGenerator örnekleri dolaylı olarak %AsyncGeneratorPrototype% nesnesinden özellikler miras alır.
# 27.6.1 %AsyncGeneratorPrototype% Nesnesi (The %AsyncGeneratorPrototype% Object)
%AsyncGeneratorPrototype% nesnesi:
%AsyncGeneratorFunction.prototype.prototype% nesnesidir.
bir sıradan nesnedir (ordinary object) .
bir AsyncGenerator örneği değildir ve bir [[AsyncGeneratorState]] dahili yuvasına sahip değildir.
değeri %AsyncIteratorPrototype% olan bir [[Prototype]] dahili yuvasına sahiptir.
tüm AsyncGenerator örnekleri tarafından dolaylı olarak miras alınan özelliklere sahiptir.
# 27.6.1.1 %AsyncGeneratorPrototype%.constructor
%AsyncGeneratorPrototype% .constructor özelliğinin ilk değeri %AsyncGeneratorFunction.prototype% nesnesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.6.1.2 %AsyncGeneratorPrototype%.next ( value )
gen , this değeri olsun.
promiseCapability , ! NewPromiseCapability (%Promise% ) olsun.
result , Completion (AsyncGeneratorValidate (gen , empty)) olsun.
IfAbruptRejectPromise (result , promiseCapability ) işlemini gerçekleştir.
state , gen .[[AsyncGeneratorState]] olsun.
Eğer state completed ise, o zaman
iteratorResult , CreateIteratorResultObject (undefined, true) olsun.
! Call (promiseCapability .[[Resolve]] , undefined, « iteratorResult ») işlemini gerçekleştir.
promiseCapability .[[Promise]] döndür.
completion , NormalCompletion (value ) olsun.
AsyncGeneratorEnqueue (gen , completion , promiseCapability ) işlemini gerçekleştir.
Eğer state ya suspended-start ya da suspended-yield ise, o zaman
AsyncGeneratorResume (gen , completion ) işlemini gerçekleştir.
Değilse,
Assert : state değeri ya executing ya da draining-queue'dur.
promiseCapability .[[Promise]] döndür.
# 27.6.1.3 %AsyncGeneratorPrototype%.return ( value )
gen , this değeri olsun.
promiseCapability , ! NewPromiseCapability (%Promise% ) olsun.
result , Completion (AsyncGeneratorValidate (gen , empty)) olsun.
IfAbruptRejectPromise (result , promiseCapability ) işlemini gerçekleştir.
completion , ReturnCompletion (value ) olsun.
AsyncGeneratorEnqueue (gen , completion , promiseCapability ) işlemini gerçekleştir.
state , gen .[[AsyncGeneratorState]] olsun.
Eğer state ya suspended-start ya da completed ise, o zaman
gen .[[AsyncGeneratorState]] değerini draining-queue olarak ayarla.
AsyncGeneratorAwaitReturn (gen ) işlemini gerçekleştir.
Else if state suspended-yield ise, o zaman
AsyncGeneratorResume (gen , completion ) işlemini gerçekleştir.
Değilse,
Assert : state değeri ya executing ya da draining-queue'dur.
promiseCapability .[[Promise]] döndür.
# 27.6.1.4 %AsyncGeneratorPrototype%.throw ( exception )
gen , this değeri olsun.
promiseCapability , ! NewPromiseCapability (%Promise% ) olsun.
result , Completion (AsyncGeneratorValidate (gen , empty)) olsun.
IfAbruptRejectPromise (result , promiseCapability ) işlemini gerçekleştir.
state , gen .[[AsyncGeneratorState]] olsun.
Eğer state suspended-start ise, o zaman
gen .[[AsyncGeneratorState]] değerini completed olarak ayarla.
state değerini completed olarak ayarla.
Eğer state completed ise, o zaman
! Call (promiseCapability .[[Reject]] , undefined, « exception ») işlemini gerçekleştir.
promiseCapability .[[Promise]] döndür.
completion , ThrowCompletion (exception ) olsun.
AsyncGeneratorEnqueue (gen , completion , promiseCapability ) işlemini gerçekleştir.
Eğer state suspended-yield ise, o zaman
AsyncGeneratorResume (gen , completion ) işlemini gerçekleştir.
Değilse,
Assert : state değeri ya executing ya da draining-queue'dur.
promiseCapability .[[Promise]] döndür.
# 27.6.1.5 %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]
%Symbol.toStringTag% özelliğinin ilk değeri "AsyncGenerator" dizesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.6.2 AsyncGenerator Örneklerinin Özellikleri (Properties of AsyncGenerator Instances)
AsyncGenerator örnekleri başlangıçta aşağıda açıklanan dahili yuvalarla oluşturulur:
Tablo 90: AsyncGenerator Örneklerinin Dahili Yuvaları
# 27.6.3 AsyncGenerator Soyut İşlemleri (AsyncGenerator Abstract Operations)
# 27.6.3.1 AsyncGeneratorRequest Kayıtları (AsyncGeneratorRequest Records)
Bir AsyncGeneratorRequest, bir asenkron jeneratörün nasıl yeniden başlatılması gerektiğine dair bilgileri depolamak için kullanılan bir Kayıt (Record) değeridir ve karşılık gelen promise nesnesini yerine getirme veya reddetme yeteneklerini içerir.
Aşağıdaki alanlara sahiptirler:
Tablo 91: AsyncGeneratorRequest Kayıt (Record) Alanları
# 27.6.3.2 AsyncGeneratorStart ( gen , genBody )
AsyncGeneratorStart soyut işlemi; gen (bir AsyncGenerator) ve genBody (parametresiz bir FunctionBody Ayrıştırma Düğümü (Parse Node) veya [Soyut Kapanış (Abstract Closure)]) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[AsyncGeneratorState]] değeri suspended-start'tır.
genContext , çalışan yürütme bağlamı (running execution context) olsun.
genContext nesnesinin Generator bileşenini gen olarak ayarla.
closure , genBody değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Soyut Kapanış (Abstract Closure) olsun:
acGenContext , çalışan yürütme bağlamı (running execution context) olsun.
acGen , acGenContext nesnesinin Generator bileşeni olsun.
Eğer genBody bir Ayrıştırma Düğümü (Parse Node) ise, o zaman
result , Completion (genBody için Değerlendirme (Evaluation) ) olsun.
Değilse,
Assert : genBody parametresiz bir Soyut Kapanış (Abstract Closure) 'tır.
result , Completion (genBody ()) olsun.
Assert : Buraya geri dönülürse, asenkron jeneratör ya bir istisna fırlatmıştır ya da örtük veya açık bir geri dönüş gerçekleştirmiştir.
acGenContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
acGen .[[AsyncGeneratorState]] değerini draining-queue olarak ayarla.
Eğer result bir olağan tamamlanma (normal completion) ise, result değerini NormalCompletion (undefined) olarak ayarla.
Eğer result bir dönüş tamamlanması (return completion) ise, result değerini NormalCompletion (result .[[Value]] ) olarak ayarla.
AsyncGeneratorCompleteStep (acGen , result , true) işlemini gerçekleştir.
AsyncGeneratorDrainQueue (acGen ) işlemini gerçekleştir.
NormalCompletion (undefined) döndür.
genContext bağlamının kod değerlendirme durumunu, o yürütme bağlamı (execution context) için değerlendirme yeniden başlatıldığında, closure parametresiz olarak çağrılacak şekilde ayarla.
gen .[[AsyncGeneratorContext]] değerini genContext olarak ayarla.
gen .[[AsyncGeneratorQueue]] değerini yeni ve boş bir Liste (List) olarak ayarla.
unused döndür.
# 27.6.3.3 AsyncGeneratorValidate ( gen , genBrand )
AsyncGeneratorValidate soyut işlemi; gen (bir ECMAScript dil değeri (ECMAScript language value) ) ve genBrand (bir Dize veya empty) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
? RequireInternalSlot (gen , [[AsyncGeneratorContext]] ) işlemini gerçekleştir.
? RequireInternalSlot (gen , [[AsyncGeneratorState]] ) işlemini gerçekleştir.
? RequireInternalSlot (gen , [[AsyncGeneratorQueue]] ) işlemini gerçekleştir.
Eğer gen .[[GeneratorBrand]] değeri genBrand değilse, bir TypeError istisnası fırlat.
unused döndür.
# 27.6.3.4 AsyncGeneratorEnqueue ( gen , completion , promiseCapability )
AsyncGeneratorEnqueue soyut işlemi; gen (an AsyncGenerator), completion (bir Tamamlanma Kaydı (Completion Record) ) ve promiseCapability (bir PromiseCapability Kaydı ) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
request , { [[Completion]] : completion , [[Capability]] : promiseCapability } AsyncGeneratorRequest Kaydı olsun.
request nesnesini gen .[[AsyncGeneratorQueue]] listesine ekle.
unused döndür.
# 27.6.3.5 AsyncGeneratorCompleteStep ( gen , completion , done [ , realm ] )
AsyncGeneratorCompleteStep soyut işlemi; gen (bir AsyncGenerator), completion (bir Tamamlanma Kaydı (Completion Record) ) ve done (bir Boolean) argümanlarını ve isteğe bağlı realm (bir Realm Kaydı (Realm Record) ) argümanını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[AsyncGeneratorQueue]] boş değildir.
next , gen .[[AsyncGeneratorQueue]] listesinin ilk elemanı olsun.
gen .[[AsyncGeneratorQueue]] listesinden ilk elemanı çıkar.
promiseCapability , next .[[Capability]] olsun.
value , completion .[[Value]] olsun.
Eğer completion bir fırlatma tamamlanması (throw completion) ise, o zaman
! Call (promiseCapability .[[Reject]] , undefined, « value ») işlemini gerçekleştir.
Değilse,
Assert : completion bir olağan tamamlanmadır (normal completion) .
Eğer realm mevcut ise, o zaman
oldRealm , çalışan yürütme bağlamının (running execution context) Realm bileşeni olsun.
çalışan yürütme bağlamının (running execution context) Realm bileşenini realm olarak ayarla.
iteratorResult , CreateIteratorResultObject (value , done ) olsun.
çalışan yürütme bağlamının (running execution context) Realm bileşenini oldRealm olarak ayarla.
Değilse,
iteratorResult , CreateIteratorResultObject (value , done ) olsun.
! Call (promiseCapability .[[Resolve]] , undefined, « iteratorResult ») işlemini gerçekleştir.
unused döndür.
# 27.6.3.6 AsyncGeneratorResume ( gen , completion )
AsyncGeneratorResume soyut işlemi; gen (bir AsyncGenerator) ve completion (bir Tamamlanma Kaydı (Completion Record) ) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[AsyncGeneratorState]] değeri ya suspended-start ya da suspended-yield'dır.
genContext , gen .[[AsyncGeneratorContext]] olsun.
gen .[[AsyncGeneratorState]] değerini executing olarak ayarla.
! RunSuspendedContext (genContext , completion ) işlemini gerçekleştir.
unused döndür.
# 27.6.3.7 AsyncGeneratorUnwrapYieldResumption ( resumptionValue )
AsyncGeneratorUnwrapYieldResumption soyut işlemi; resumptionValue (bir Tamamlanma Kaydı (Completion Record) ) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir ani tamamlanma (abrupt completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer resumptionValue bir dönüş tamamlanması (return completion) değilse, ? resumptionValue döndür.
awaited , Completion (Await (resumptionValue .[[Value]] )) olsun.
Eğer awaited bir fırlatma tamamlanması (throw completion) ise, ? awaited döndür.
Assert : awaited bir olağan tamamlanmadır (normal completion) .
ReturnCompletion (awaited .[[Value]] ) döndür.
# 27.6.3.8 AsyncGeneratorYield ( arg )
AsyncGeneratorYield soyut işlemi; arg (bir ECMAScript dil değeri (ECMAScript language value) ) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren olağan tamamlanma (normal completion containing) ya da bir ani tamamlanma (abrupt completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
genContext , çalışan yürütme bağlamı (running execution context) olsun.
Assert : genContext , bir jeneratörün yürütme bağlamıdır (execution context) .
gen , genContext nesnesinin Generator bileşeninin değeri olsun.
Assert : GetGeneratorKind () değeri async'dir.
completion , NormalCompletion (arg ) olsun.
Assert : yürütme bağlamı yığınının (execution context stack) en az iki elemanı vardır.
previousContext , yürütme bağlamı yığınının (execution context stack) sondan ikinci elemanı olsun.
previousRealm , previousContext nesnesinin Realm bileşeni olsun.
AsyncGeneratorCompleteStep (gen , completion , false, previousRealm ) işlemini gerçekleştir.
queue , gen .[[AsyncGeneratorQueue]] olsun.
Eğer queue boş değilse, o zaman
NOTE : Yürütme, jeneratör askıya alınmadan devam eder.
toYield , queue listesinin ilk elemanı olsun.
resumptionValue , Completion (toYield .[[Completion]] ) olsun.
? AsyncGeneratorUnwrapYieldResumption (resumptionValue ) döndür.
Set gen .[[AsyncGeneratorState]] to suspended-yield.
genContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
callerContext , çalışan yürütme bağlamı (running execution context) olsun.
undefined geçirerek callerContext bağlamını yeniden başlat. Eğer genContext daha sonra tekrar yeniden başlatılırsa, resumptionValue , yeniden başlatıldığı Tamamlanma Kaydı (Completion Record) olsun.
Assert : Denetim buraya ulaşırsa, o zaman genContext yine çalışan yürütme bağlamıdır (running execution context) .
? AsyncGeneratorUnwrapYieldResumption (resumptionValue ) döndür.
# 27.6.3.9 AsyncGeneratorAwaitReturn ( gen )
AsyncGeneratorAwaitReturn soyut işlemi; gen (bir AsyncGenerator) argümanını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[AsyncGeneratorState]] değeri draining-queue'dur.
queue , gen .[[AsyncGeneratorQueue]] olsun.
Assert : queue boş değildir.
next , queue listesinin ilk elemanı olsun.
completion , Completion (next .[[Completion]] ) olsun.
Assert : completion bir dönüş tamamlanmasıdır (return completion) .
promiseCompletion , Completion (PromiseResolve (%Promise% , completion .[[Value]] )) olsun.
Eğer promiseCompletion bir ani tamamlanma (abrupt completion) ise, o zaman
AsyncGeneratorCompleteStep (gen , promiseCompletion , true).
AsyncGeneratorDrainQueue (gen ) işlemini gerçekleştir.
unused döndür.
Assert : promiseCompletion bir olağan tamamlanmadır (normal completion) .
promise , promiseCompletion .[[Value]] olsun.
fulfilledClosure , (value ) parametrelerine sahip, gen değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:
Assert : gen .[[AsyncGeneratorState]] değeri draining-queue'dur.
result , NormalCompletion (value ) olsun.
AsyncGeneratorCompleteStep (gen , result , true).
AsyncGeneratorDrainQueue (gen ) işlemini gerçekleştir.
NormalCompletion (undefined) döndür.
onFulfilled , CreateBuiltinFunction (fulfilledClosure , 1, "", « ») olsun.
rejectedClosure , (reason ) parametrelerine sahip, gen değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:
Assert : gen .[[AsyncGeneratorState]] değeri draining-queue'dur.
result , ThrowCompletion (reason ) olsun.
AsyncGeneratorCompleteStep (gen , result , true).
AsyncGeneratorDrainQueue (gen ) işlemini gerçekleştir.
NormalCompletion (undefined) döndür.
onRejected , CreateBuiltinFunction (rejectedClosure , 1, "", « ») olsun.
PerformPromiseThen (promise , onFulfilled , onRejected ) işlemini gerçekleştir.
unused döndür.
# 27.6.3.10 AsyncGeneratorDrainQueue ( gen )
AsyncGeneratorDrainQueue soyut işlemi; gen (bir AsyncGenerator) argümanını alır ve unused döndürür. Jeneratörün AsyncGeneratorQueue kuyruğunu, bir dönüş tamamlanması (return completion) içeren bir AsyncGeneratorRequest kaydıyla karşılaşana kadar boşaltır. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert : gen .[[AsyncGeneratorState]] değeri draining-queue'dur.
queue , gen .[[AsyncGeneratorQueue]] olsun.
queue boş olmadığı sürece tekrarla:
next , queue listesinin ilk elemanı olsun.
completion , Completion (next .[[Completion]] ) olsun.
Eğer completion bir dönüş tamamlanması (return completion) ise, o zaman
AsyncGeneratorAwaitReturn (gen ) işlemini gerçekleştir.
unused döndür.
Eğer completion bir olağan tamamlanma (normal completion) ise, o zaman
completion değerini NormalCompletion (undefined) olarak güncelle.
AsyncGeneratorCompleteStep (gen , completion , true) işlemini gerçekleştir.
gen .[[AsyncGeneratorState]] değerini completed olarak ayarla.
unused döndür.
# 27.7 AsyncFunction Nesneleri (AsyncFunction Objects)
AsyncFunction nesneleri, genellikle AsyncFunctionDeclaration , AsyncFunctionExpression , AsyncMethod ve AsyncArrowFunction ifadelerinin değerlendirilmesiyle oluşturulan fonksiyonlardır. Ayrıca %AsyncFunction% içsel nesnesi çağrılarak da oluşturulabilirler.
# 27.7.1 AsyncFunction Yapıcısı (The AsyncFunction Constructor)
AsyncFunction yapıcısı (constructor) :
%AsyncFunction% nesnesidir.
Function yapıcısının bir alt sınıfıdır.
bir yapıcı olarak değil de bir fonksiyon olarak çağrıldığında yeni bir AsyncFunction oluşturur ve başlatır. Bu nedenle, AsyncFunction(...) fonksiyon çağrısı, aynı argümanlarla yapılan new AsyncFunction(...) nesne oluşturma ifadesiyle eş değerdir.
bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen AsyncFunction davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors) , yerleşik asenkron fonksiyon davranışı için gerekli dahili yuvalara sahip alt sınıf örneklerini oluşturmak ve başlatmak için AsyncFunction yapıcısına (constructor) bir super çağrısı içermelidir. Asenkron fonksiyon nesnelerini (function objects) tanımlamaya yönelik tüm ECMAScript sözdizimsel biçimleri, doğrudan AsyncFunction örnekleri oluşturur. AsyncFunction alt sınıflarının örneklerini oluşturmak için sözdizimsel bir yol yoktur.
# 27.7.1.1 AsyncFunction ( ...paramArgs , bodyArg )
Son argüman (eğer varsa) bir asenkron fonksiyonun gövdesini (yürütülebilir kod) belirtir. Önceki tüm argümanlar formal parametreleri belirtir.
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
activeFunc , etkin fonksiyon nesnesi (active function object) olsun.
Eğer bodyArg mevcut değilse, bodyArg değerini boş Dize olarak ayarla.
Dönüş değeri: ? CreateDynamicFunction (activeFunc , NewTarget, async, paramArgs , bodyArg ).
NOT
20.2.1.1 altındaki NOTE kısmına bakınız.
# 27.7.2 AsyncFunction Yapıcısının Özellikleri (Properties of the AsyncFunction Constructor)
AsyncFunction yapıcısı (constructor) :
# 27.7.2.1 AsyncFunction.prototype
AsyncFunction.prototype özelliğinin ilk değeri AsyncFunction prototip nesnesidir (AsyncFunction prototype object) .
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : false } özniteliklerine sahiptir.
# 27.7.3 AsyncFunction Prototip Nesnesinin Özellikleri (Properties of the AsyncFunction Prototype Object)
AsyncFunction prototip nesnesi:
# 27.7.3.1 AsyncFunction.prototype.constructor
AsyncFunction.prototype.constructor özelliğinin ilk değeri %AsyncFunction% nesnesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.7.3.2 AsyncFunction.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag% özelliğinin ilk değeri "AsyncFunction" dizesidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 27.7.4 AsyncFunction Örnekleri (AsyncFunction Instances)
Her AsyncFunction örneği bir ECMAScript fonksiyon nesnesidir (function object) ve Tablo 25 içinde listelenen dahili yuvalara sahiptir. Bu tür tüm örnekler için [[IsClassConstructor]] dahili yuvasının değeri false'dur. AsyncFunction örnekleri yapıcılar (constructors) değildir ve [[Construct]] dahili metoduna sahip değildir. AsyncFunction örnekleri, oluşturulabilir (constructable) olmadıkları için prototype özelliğine sahip değildir.
Her AsyncFunction örneği aşağıdaki kendi özelliklerine (own properties) sahiptir:
# 27.7.4.1 length
20.2.4.1 içinde Function örneklerinin "length" özelliği için verilen şartname, AsyncFunction örnekleri için de geçerlidir.
# 27.7.4.2 name
20.2.4.2 içinde Function örneklerinin "name" özelliği için verilen şartname, AsyncFunction örnekleri için de geçerlidir.
# 27.7.5 Asenkron Fonksiyonların Soyut İşlemleri (Async Functions Abstract Operations)
# 27.7.5.1 AsyncFunctionStart ( promiseCapability , asyncFuncBody )
AsyncFunctionStart soyut işlemi; promiseCapability (bir PromiseCapability Kaydı ) ve asyncFuncBody (bir FunctionBody Ayrıştırma Düğümü (Parse Node) , bir ExpressionBody Ayrıştırma Düğümü (Parse Node) veya parametresiz bir [Soyut Kapanış (Abstract Closure)]) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
runningContext , çalışan yürütme bağlamı (running execution context) olsun.
asyncContext , runningContext nesnesinin bir kopyası olsun.
NOTE : AsyncBlockStart işleminin yürütmesini sürdürmesi için yürütme durumunun kopyalanması gereklidir. Şu anda yürütülen bir bağlamın yürütmesini sürdürmek tanımsızdır.
AsyncBlockStart (promiseCapability , asyncFuncBody , asyncContext ) işlemini gerçekleştir.
unused döndür.
# 27.7.5.2 AsyncBlockStart ( promiseCapability , asyncBody , asyncContext )
AsyncBlockStart soyut işlemi; promiseCapability (bir PromiseCapability Kaydı ), asyncBody (bir Ayrıştırma Düğümü (Parse Node) veya parametresiz bir [Soyut Kapanış (Abstract Closure)]) ve asyncContext (bir yürütme bağlamı (execution context) ) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
closure , promiseCapability ve asyncBody değerlerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Soyut Kapanış (Abstract Closure) olsun:
acAsyncContext , çalışan yürütme bağlamı (running execution context) olsun.
Eğer asyncBody bir Ayrıştırma Düğümü (Parse Node) ise, o zaman
result , Completion (asyncBody için Değerlendirme (Evaluation) ) olsun.
Değilse,
Assert : asyncBody parametresiz bir Soyut Kapanış (Abstract Closure) 'tır.
result , Completion (asyncBody ()) olsun.
Assert : Denetim buraya ulaşırsa, asenkron fonksiyon ya bir istisna fırlatmıştır ya da örtük veya açık bir geri dönüş gerçekleştirmiştir; tüm await işlemleri tamamlanmıştır.
acAsyncContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
Eğer result bir olağan tamamlanma (normal completion) ise, o zaman
! Call (promiseCapability .[[Resolve]] , undefined, « undefined ») işlemini gerçekleştir.
Else if result bir dönüş tamamlanması (return completion) ise, o zaman
! Call (promiseCapability .[[Resolve]] , undefined, « result .[[Value]] ») işlemini gerçekleştir.
Değilse,
Assert : result bir fırlatma tamamlanması (throw completion) 'tır.
! Call (promiseCapability .[[Reject]] , undefined, « result .[[Value]] ») işlemini gerçekleştir.
NormalCompletion (unused) döndür.
asyncContext bağlamının kod değerlendirme durumunu, o yürütme bağlamı (execution context) için değerlendirme yeniden başlatıldığında, closure parametresiz olarak çağrılacak şekilde ayarla.
result , ! RunSuspendedContext (asyncContext , NormalCompletion (empty)) olsun.
Assert : result değeri unused'dur.
NOTE : result değerlerinin olası kaynakları Await veya eğer asenkron fonksiyon hiçbir şeyi await etmiyorsa, yukarıdaki 1.f adımıdır.
unused döndür.
# 27.7.5.3 Await ( arg )
Await soyut işlemi; arg (bir ECMAScript dil değeri (ECMAScript language value) ) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) veya empty içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
asyncContext , çalışan yürütme bağlamı (running execution context) olsun.
promise , ? PromiseResolve (%Promise% , arg ) olsun.
fulfilledClosure , (v ) parametrelerine sahip, asyncContext değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:
Completion (RunSuspendedContext (asyncContext , NormalCompletion (v ))) işlemini gerçekleştir.
NOTE : RunSuspendedContext tarafından döndürülen Tamamlanma Kaydı (Completion Record) kasıtlı olarak yok sayılır.
NormalCompletion (undefined) döndür.
onFulfilled , CreateBuiltinFunction (fulfilledClosure , 1, "", « ») olsun.
rejectedClosure , (reason ) parametrelerine sahip, asyncContext değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:
Completion (RunSuspendedContext (asyncContext , ThrowCompletion (reason ))) işlemini gerçekleştir.
NOTE : RunSuspendedContext tarafından döndürülen Tamamlanma Kaydı (Completion Record) kasıtlı olarak yok sayılır.
NormalCompletion (undefined) döndür.
onRejected , CreateBuiltinFunction (rejectedClosure , 1, "", « ») olsun.
PerformPromiseThen (promise , onFulfilled , onRejected ) işlemini gerçekleştir.
asyncContext bağlamını yürütme bağlamı yığınından (execution context stack) çıkar ve yürütme bağlamı yığınının (execution context stack) tepesinde bulunan yürütme bağlamını (execution context) çalışan yürütme bağlamı (running execution context) olarak geri yükle.
callerContext , çalışan yürütme bağlamı (running execution context) olsun.
empty geçirerek callerContext bağlamını yeniden başlat. Eğer asyncContext daha sonra tekrar yeniden başlatılırsa, completion , yeniden başlatıldığı Tamamlanma Kaydı (Completion Record) olsun.
Assert : Denetim buraya ulaşırsa, o zaman asyncContext yine çalışan yürütme bağlamıdır (running execution context) .
completion döndür.
← önceki 26 Bellek Yönetimi (Managing Memory)
sonraki → 28 Yansıtma (Reflection)