追蹤非同步任務完成狀態的複雜層次結構。這旨在為您提供一種記錄和報告非同步中常見的大型遞歸扇出和收集類型工作流程的進度的方法。
您如何處理此完成資料取決於您,但最常見的用例是將其提供給眾多進度條模組之一。
大多數進度條模組都包含一個基本版本,但我的需求更複雜。
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
} )
} )
實現於: Tracker
、 TrackerGroup
、 TrackerStream
傳回已完成工作與待完成工作的比率。範圍為 0 到 1。
實現於: Tracker
、 TrackerGroup
將追蹤器標記為已完成。對於 TrackerGroup,這會將其所有元件標記為已完成。
將此追蹤器的所有元件標記為已完成,這又意味著該追蹤器的tracker.completed()
現在將為 1。
這將導致發出一個或多個change
事件。
所有追蹤器物件都會發出帶有以下參數的change
事件:
function (name, completed, tracker)
name
是最初發出事件的追蹤器的名稱,或者如果沒有,則為第一個包含該事件的追蹤器群組的名稱。
completed
是完成百分比(由tracker.completed()
方法傳回)。
tracker
是您正在偵聽事件的追蹤器物件。
var tracker = new TrackerGroup( name )
建立一個新的空追蹤器聚合組。這些追蹤器的完成狀態由新增至該聚合組的其他追蹤器的完成狀態決定。
前任。
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 ,重量)
將otherTracker新增至此聚合組。權重決定了您預計該追蹤器完成所需的時間與其他單位的比例。例如,如果您新增一個權重為 1 的追蹤器和另一個權重為 2 的追蹤器,那麼您會說第二個追蹤器的完成時間是第一個追蹤器的兩倍。因此,第一個將佔該追蹤器完成度的 33%,第二個將佔其餘 67%。
返回otherTracker 。
上面完全等同於:
var subGroup = tracker . addUnit ( new TrackerGroup ( name ) , weight )
上面完全等同於:
var subItem = tracker . addUnit ( new Tracker ( name , todo ) , weight )
上面完全等同於:
var subStream = tracker . addUnit ( new TrackerStream ( name , todo ) , weight )
傳回一棵樹,顯示此追蹤器群組及其所有子層級的完成情況,包括遞歸輸入所有子層級。
var tracker = new Tracker(姓名,待辦事項)
通常,它們被構造為追蹤器組的一部分(透過newItem
)。
傳回已完成工作與待完成工作的比率。範圍為 0 到 1。
tracker.addWork(待辦事項)
增加了需要完成的工作量,從而降低了完成率。觸發change
事件。
tracker.completeWork(完成)
增加完成的工作量,從而提高完成率。完成的工作永遠不會超過待完成的工作量。也就是說,百分比 > 100% 是不允許的。觸發change
事件。
將此追蹤器標記為已完成,tracker.completed change
) 現在將為 1。
var tracker = new TrackerStream(名稱,大小,選項)
追蹤器流物件是一個傳遞流,每次區塊通過時都會更新內部追蹤器物件。它旨在追蹤下載、文件提取和其他相關活動。您可以透過將資料來源透過管道傳輸到其中,然後將其用作資料來源來使用它。
如果您的資料具有長度屬性,那麼該屬性將用作區塊通過時完成的工作量。如果沒有(例如,物件流),則每個區塊都算作完成 1 個工作單元,因此您的大小應該是正在串流傳輸的物件總數。
tracker.addWork(待辦事項)
增加了需要完成的工作量,從而降低了完成率。觸發change
事件。