Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  safe-resolve-ticks.js

  Sprache: JAVA
 

// |jit-test| skip-if: getBuildConfiguration("release_or_beta")
//
// JS::SafeResolve of a thenable settles the outer promise at the SAME
// microtask depth as an ordinary resolve(thenable). Under the updated
// thenable-curtailment spec, PerformPromiseResolution runs in ~deferred~
// mode: when it finds a callable "then" it invokes PerformPromiseResolveThenable
// synchronously rather than enqueuing a further job, so the deferred resolution
// does not add an extra tick relative to normal assimilation.

// Measure at which microtask "tick" the outer reaction fires, by racing it
// against a chain of native-promise reactions that bump `tick`.
function measure(installResolution) {
  const {promise} = Promise.withResolvers();

  let ticksAtFulfill = -1;
  let tick = 0;
  promise.then(() => { ticksAtFulfill = tick; });

  installResolution(promise);

  let pending = Promise.resolve();
  for (let i = 0; i < 6; i++) {
    pending = pending.then(() => { tick++; });
  }
  drainJobQueue();
  assertEq(ticksAtFulfill >= 0true"reaction fired at some tick");
  return ticksAtFulfill;
}

// Baseline: a normal resolve(thenable). The resolve function lives on the
// capability, so we need the resolvers; reproduce measure() inline to get it.
function measureNormal() {
  const {promise, resolve} = Promise.withResolvers();

  let ticksAtFulfill = -1;
  let tick = 0;
  promise.then(() => { ticksAtFulfill = tick; });

  resolve({ then(onFulfilled) { onFulfilled("normal"); } });

  let pending = Promise.resolve();
  for (let i = 0; i < 6; i++) {
    pending = pending.then(() => { tick++; });
  }
  drainJobQueue();
  assertEq(ticksAtFulfill >= 0true"reaction fired at some tick");
  return ticksAtFulfill;
}

// Plain callable-"then" thenable.
{
  const baseline = measureNormal();
  const safe = measure(p => {
    safeResolvePromise(p, { then(onFulfilled) { onFulfilled("safe"); } });
  });
  assertEq(safe, baseline,
           "SafeResolve(thenable) settles at the same tick as resolve(thenable)");
}

// A real Promise as the resolution value: same invariant.
{
  let baseTick;
  {
    const {promise, resolve} = Promise.withResolvers();
    let ticksAtFulfill = -1, tick = 0;
    promise.then(() => { ticksAtFulfill = tick; });
    resolve(Promise.resolve("inner"));
    let pending = Promise.resolve();
    for (let i = 0; i < 7; i++) pending = pending.then(() => { tick++; });
    drainJobQueue();
    baseTick = ticksAtFulfill;
  }

  let safeTick;
  {
    const {promise} = Promise.withResolvers();
    let ticksAtFulfill = -1, tick = 0;
    promise.then(() => { ticksAtFulfill = tick; });
    safeResolvePromise(promise, Promise.resolve("inner"));
    let pending = Promise.resolve();
    for (let i = 0; i < 7; i++) pending = pending.then(() => { tick++; });
    drainJobQueue();
    safeTick = ticksAtFulfill;
  }

  assertEq(safeTick, baseTick,
           "promise-with-promise via SafeResolve settles at the same tick");
}

Messung V0.5 in Prozent
C=88 H=93 G=90

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002