4 Kasım 2020 Çarşamba

Promise Micro Queue

Micro Queue Kavramı
Açıklaması şöyle
Jobs are enqueued on the job queues, and in current spec version there are two job queues: ScriptJobs, and PromiseJobs.
Micro Queue ve Macro Queue Farkı
Örnek
Elimizde şöyle bir kod olsun
setTimeout(() => console.log("hello"), 0);

Promise.resolve('Success!')
  .then(console.log)
Çıktı olarak şunu alırız
Success!
hello
Açıklaması şöyle
There are 2 separate queues for handling of the callbacks. A macro and a micro queue. setTimeout enqueues an item in the macro queue, while promise resolution - to the micro queue. The currently executing macro task(the main script itself in this case) is executed synchronously, line by line until it is finished. The moment it is finished, the loop executes everything queued in the microtask queue before continuing with the next item from the macro queue(which in your case is the console.log("hello") queued from the setTimeout).

Micro Queue Örnekler
Örnek
Elimizde şöyle bir kod olsun. Burada Promise önce yaratılmasına rağmen then() içindeki iş kuyruğa ekleniyor.
// Enqueue a new promise on the PromiseJobs queue.
new Promise(resolve => setTimeout(() => resolve(10), 0))
  .then(value => console.log(value));
 
// This log is executed earlier, since it's still a
// running context, and job cannot start executing first
console.log(20);
 
// Output: 20, 10
Örnek
Elimizde şöyle bir kod olsun. Çıktı olarak 1,2,4,3 alırız.
new Promise(resolve => {
  new Promise(resolve1 => {
    console.log(1)
    resolve1()
  })
  .then(() => {
    console.log(2)
  })
  .then(() => {
    console.log(3)
  })
  resolve()
})
.then(() => {
  console.log(4)
})
- En dıştaki Promise constructor çağrılınca içteki promise constructor çalışır. O da resolve1'ı tetikler. resolve1 ise log(2)'yi kuyruğa ekler.
Böylece çıktı 1 olur. Kuyrukta ise log(2) bulunur. 
- Daha sonra en dıştaki Promise'in then() metodu çağrılır ve log(4) kuyruğa atılır. 
- resolve2() çalışır ve çıktı 
1
2
olur.
- resolve2() arkasından gelen resolve3()'ü kuyruğa ekler.
- resolve4 çalışır çıktı
1
2
4
olur
- resolve3() çalışır çıktı
1
2
4
3
olur

Hiç yorum yok:

Yorum Gönder