Skip to content

Basiskennis van taken en schedulers ​

Wat is synchrone verwerking? ​

Synchrone verwerking wordt onmiddellijk uitgevoerd in de volgorde waarin de code is geschreven, en gaat niet verder naar de volgende verwerking totdat de vorige is voltooid.

Voorbeeld ​

ts
console.log('A');
console.log('B');
console.log('C');

// Output:
// A
// B
// C

Wat is asynchrone verwerking? ​

Asynchrone verwerking wordt niet onmiddellijk uitgevoerd, maar pas na het voltooien van de huidige synchrone verwerking. Er zijn twee soorten asynchrone verwerking: "macrotasks" en "microtasks".

Macrotasks ​

  • Taken die in de volgende cyclus van de event loop worden uitgevoerd.
  • Voorbeelden: setTimeout, setInterval, browserevents

Uitvoeringsvoorbeeld ​

ts
console.log('Start');
setTimeout(() => console.log('Macro Task'), 0);
console.log('End');

// Output:
// Start
// End
// Macro Task

Relatie met RxJS ​

  • asyncScheduler
    • Gebruikt intern setTimeout
    • Werkt als macrotask
ts
import { of, asyncScheduler } from 'rxjs';
import { observeOn } from 'rxjs';

of('Hello')
  .pipe(observeOn(asyncScheduler))
  .subscribe(console.log);

// Output:
// Hello

Microtasks ​

  • Taken die onmiddellijk na voltooiing van de huidige taak worden uitgevoerd, vóór het begin van de volgende taak.
  • Voorbeelden: Promise.then, queueMicrotask

Uitvoeringsvoorbeeld ​

ts
console.log('Start');
Promise.resolve().then(() => console.log('Micro Task'));
console.log('End');

// Output:
// Start
// End
// Micro Task

Relatie met RxJS ​

  • asapScheduler
    • Gebruikt intern Promise.resolve().then()
    • Werkt als microtask
ts
import { of, asapScheduler } from 'rxjs';
import { observeOn } from 'rxjs';

of('Hi')
  .pipe(observeOn(asapScheduler))
  .subscribe(console.log);

// Output:
// Hi

Synchrone taken ​

  • Normale code die onmiddellijk wordt uitgevoerd.

Relatie met RxJS ​

  • queueScheduler
    • Lijkt synchroon, maar maakt fijne controle mogelijk door task queuing.
ts
import { of, queueScheduler } from 'rxjs';
import { observeOn } from 'rxjs';

of('Now')
  .pipe(observeOn(queueScheduler))
  .subscribe(console.log);

// Output:
// Now

Samenvatting van uitvoervolgorde ​

Codevoorbeeld ​

ts
console.log('1');

setTimeout(() => console.log('2 (setTimeout)'), 0);
Promise.resolve().then(() => console.log('3 (Promise)'));

console.log('4');

// Output:
// 1
// 4
// 3 (Promise) 👈 Microtask
// 2 (setTimeout) 👈 Macrotask

Overzichtstabel taken en RxJS-schedulers ​

TypeVoorbeeldRxJS Scheduler
Synchrone verwerkingNormale codequeueScheduler
MicrotaskPromise.then, queueMicrotaskasapScheduler
MacrotasksetTimeout, setIntervalasyncScheduler

Uitgebracht onder de CC-BY-4.0 licentie.