Verfolgen Sie komplexe Hierarchien asynchroner Aufgabenerledigungsstatus. Dies soll Ihnen eine Möglichkeit bieten, den Fortschritt der großen rekursiven Fanout- und Gather-Workflows aufzuzeichnen und zu melden, die bei Async so häufig vorkommen.
Was Sie mit diesen Abschlussdaten machen, liegt bei Ihnen, aber der häufigste Anwendungsfall besteht darin, sie einem der vielen Fortschrittsbalkenmodule zuzuführen.
Die meisten Fortschrittsbalkenmodule enthalten eine rudimentäre Version davon, aber meine Anforderungen waren komplexer.
var TrackerGroup = require ( "are-we-there-yet" ) . TrackerGroup
var top = new TrackerGroup ( "program" )
var single = top . newItem ( "one thing" , 100 )
single . completeWork ( 20 )
console . log ( top . completed ( ) ) // 0.2
fs . stat ( "file" , function ( er , stat ) {
if ( er ) throw er
var stream = top . newStream ( "file" , stat . size )
console . log ( top . completed ( ) ) // now 0.1 as single is 50% of the job and is 20% complete
// and 50% * 20% == 10%
fs . createReadStream ( "file" ) . pipe ( stream ) . on ( "data" , function ( chunk ) {
// do stuff with chunk
} )
top . on ( "change" , function ( name ) {
// called each time a chunk is read from "file"
// top.completed() will start at 0.1 and fill up to 0.6 as the file is read
} )
} )
Implementiert in: Tracker
, TrackerGroup
, TrackerStream
Gibt das Verhältnis von abgeschlossener Arbeit zu noch zu erledigender Arbeit zurück. Bereich von 0 bis 1.
Implementiert in: Tracker
, TrackerGroup
Markiert den Tracker als abgeschlossen. Bei einer TrackerGroup markiert dies alle ihre Komponenten als abgeschlossen.
Markiert alle Komponenten dieses Trackers als abgeschlossen, was wiederum bedeutet, dass tracker.completed()
dafür jetzt 1 ist.
Dies führt dazu, dass ein oder mehrere change
ausgegeben werden.
Alle Tracker-Objekte geben change
mit den folgenden Argumenten aus:
function (name, completed, tracker)
name
ist der Name des Trackers, der das Ereignis ursprünglich ausgegeben hat, oder, falls es keins gab, der erste enthaltende Tracker-Gruppe, die eines hatte.
completed
ist der Prozentsatz der Fertigstellung (wie von der Methode tracker.completed()
zurückgegeben).
tracker
ist das Tracker-Objekt, auf dem Sie auf Ereignisse warten.
var tracker = new TrackerGroup( name )
Erstellt eine neue leere Tracker-Aggregationsgruppe. Dabei handelt es sich um Tracker, deren Abschlussstatus durch den Abschlussstatus anderer dieser Aggregationsgruppe hinzugefügter Tracker bestimmt wird.
Ex.
var tracker = new TrackerGroup ( "parent" )
var foo = tracker . newItem ( "firstChild" , 100 )
var bar = tracker . newItem ( "secondChild" , 100 )
foo . finish ( )
console . log ( tracker . completed ( ) ) // 0.5
bar . finish ( )
console . log ( tracker . completed ( ) ) // 1
tracker.addUnit( otherTracker , Gewicht )
Fügt den otherTracker zu dieser Aggregationsgruppe hinzu. Das Gewicht bestimmt, wie lange es im Verhältnis zu anderen Einheiten voraussichtlich dauern wird, bis dieser Tracker fertig ist. Wenn Sie also beispielsweise einen Tracker mit der Gewichtung 1 und einen weiteren mit der Gewichtung 2 hinzufügen, sagen Sie, dass die Fertigstellung des zweiten doppelt so lange dauert wie die des ersten. Somit wird ersteres 33 % der Fertigstellung dieses Trackers ausmachen und letzteres wird die restlichen 67 % ausmachen.
Gibt otherTracker zurück.
Das Obige entspricht genau:
var subGroup = tracker . addUnit ( new TrackerGroup ( name ) , weight )
Das Obige entspricht genau:
var subItem = tracker . addUnit ( new Tracker ( name , todo ) , weight )
Das Obige entspricht genau:
var subStream = tracker . addUnit ( new TrackerStream ( name , todo ) , weight )
Gibt einen Baum zurück, der die Vervollständigung dieser Tracker-Gruppe und aller ihrer untergeordneten Elemente zeigt, einschließlich der rekursiven Eingabe aller untergeordneten Elemente.
var tracker = neuer Tracker( Name , Todo )
Normalerweise werden diese als Teil einer Tracker-Gruppe erstellt (über newItem
).
Gibt das Verhältnis von abgeschlossener Arbeit zu noch zu erledigender Arbeit zurück. Bereich von 0 bis 1. Wenn die insgesamt zu erledigende Arbeit 0 ist, wird 0 zurückgegeben.
tracker.addWork( todo )
Erhöht den Umfang der zu erledigenden Arbeit und verringert so den Fertigstellungsgrad. Löst ein change
aus.
tracker.completeWork( abgeschlossen )
Erhöhen Sie den Umfang der abgeschlossenen Arbeiten und erhöhen Sie so den Abschlussprozentsatz. Die erledigte Arbeit wird niemals über den Umfang der noch zu erledigenden Arbeit hinausgehen. Das heißt, Prozentsätze > 100 % sind nicht zulässig. Löst ein change
aus.
Markiert diesen Tracker als abgeschlossen, tracker.completed() ist jetzt 1. Löst ein change
aus.
var tracker = new TrackerStream( Name , Größe , Optionen )
Das Tracker-Stream-Objekt ist ein Pass-Through-Stream, der jedes Mal, wenn ein Block durchläuft, ein internes Tracker-Objekt aktualisiert. Es soll Downloads, Dateiextraktion und andere damit verbundene Aktivitäten verfolgen. Sie nutzen es, indem Sie Ihre Datenquelle hineinleiten und es dann als Ihre Datenquelle verwenden.
Wenn Ihre Daten über ein Längenattribut verfügen, wird dieses als Arbeitsaufwand beim Durchlaufen des Blocks verwendet. Wenn dies nicht der Fall ist (z. B. Objekt-Streams), zählt jeder Block als Abschluss einer Arbeitseinheit, sodass Ihre Größe der Gesamtzahl der gestreamten Objekte entsprechen sollte.
tracker.addWork( todo )
Erhöht den Umfang der zu erledigenden Arbeit und verringert so den Fertigstellungsgrad. Löst ein change
aus.