Realice un seguimiento de jerarquías complejas de estados de finalización de tareas asincrónicas. Esto tiene como objetivo brindarle una forma de registrar e informar el progreso del gran despliegue recursivo y los flujos de trabajo de tipo recopilación que son tan comunes en asíncrono.
Lo que haga con estos datos de finalización depende de usted, pero el caso de uso más común es enviarlos a uno de los muchos módulos de la barra de progreso.
La mayoría de los módulos de la barra de progreso incluyen una versión rudimentaria de esto, pero mis necesidades eran más complejas.
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
} )
} )
Implementado en: Tracker
, TrackerGroup
, TrackerStream
Devuelve la relación entre el trabajo completado y el trabajo por realizar. Rango de 0 a 1.
Implementado en: Tracker
, TrackerGroup
Marca el rastreador como completado. Con un TrackerGroup, esto marca todos sus componentes como completados.
Marca todos los componentes de este rastreador como terminados, lo que a su vez significa que tracker.completed()
para esto ahora será 1.
Esto dará como resultado la emisión de uno o más eventos change
.
Todos los objetos de seguimiento emiten eventos change
con los siguientes argumentos:
function (name, completed, tracker)
name
es el nombre del rastreador que emitió originalmente el evento o, si no tenía uno, el primer grupo de rastreadores que lo tuvo.
completed
es el porcentaje completo (según lo devuelto por el método tracker.completed()
).
tracker
es el objeto de seguimiento en el que está escuchando eventos.
var tracker = nuevo TrackerGroup ( nombre )
Crea un nuevo grupo de agregación de rastreadores vacío. Estos son rastreadores cuyo estado de finalización está determinado por el estado de finalización de otros rastreadores agregados a este grupo de agregación.
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( otroTracker , peso )
Agrega el otherTracker a este grupo de agregación. El peso determina cuánto tiempo espera que tarde este rastreador en completarse en proporción a otras unidades. Entonces, por ejemplo, si agrega un rastreador con un peso de 1 y otro con un peso de 2, está diciendo que el segundo tardará el doble en completarse que el primero. Así, el primero supondrá el 33% de la realización de este tracker y el segundo el 67% restante.
Devuelve otroTracker .
Lo anterior es exactamente equivalente a:
var subGroup = tracker . addUnit ( new TrackerGroup ( name ) , weight )
Lo anterior es exactamente equivalente a:
var subItem = tracker . addUnit ( new Tracker ( name , todo ) , weight )
Lo anterior es exactamente equivalente a:
var subStream = tracker . addUnit ( new TrackerStream ( name , todo ) , weight )
Devuelve un árbol que muestra la finalización de este grupo de rastreadores y todos sus hijos, incluido el ingreso recursivo de todos los hijos.
var rastreador = nuevo rastreador ( nombre , tarea pendiente )
Normalmente, estos se construyen como parte de un grupo de seguimiento (a través de newItem
).
Devuelve la relación entre el trabajo completado y el trabajo por realizar. Rango de 0 a 1. Si el trabajo total por realizar es 0, devolverá 0.
rastreador.addWork( todo )
Aumenta la cantidad de trabajo a realizar, disminuyendo así el porcentaje de finalización. Desencadena un evento change
.
tracker.completeWork ( completado )
Incrementar la cantidad de trabajo completado, aumentando así el porcentaje de finalización. Nunca aumentará el trabajo completado más allá de la cantidad de trabajo por hacer. Es decir, no se permiten porcentajes > 100%. Desencadena un evento change
.
Marca este rastreador como finalizado, tracker.completed() ahora será 1. Activa un evento change
.
var tracker = nuevo TrackerStream ( nombre , tamaño , opciones )
El objeto de flujo de seguimiento es un flujo de paso que actualiza un objeto de seguimiento interno cada vez que pasa un bloque. Su objetivo es realizar un seguimiento de las descargas, la extracción de archivos y otras actividades relacionadas. Lo usa canalizando su fuente de datos y luego usándolo como su fuente de datos.
Si sus datos tienen un atributo de longitud, entonces se utiliza como la cantidad de trabajo completado cuando se pasa el fragmento. Si no es así (por ejemplo, flujos de objetos), entonces cada fragmento cuenta como completar 1 unidad de trabajo, por lo que su tamaño debe ser el número total de objetos que se transmiten.
rastreador.addWork( todo )
Aumenta la cantidad de trabajo a realizar, disminuyendo así el porcentaje de finalización. Desencadena un evento change
.