ติดตามลำดับชั้นที่ซับซ้อนของสถานะความสำเร็จของงานแบบอะซิงโครนัส สิ่งนี้มีจุดมุ่งหมายเพื่อให้คุณมีวิธีในการบันทึกและรายงานความคืบหน้าของการกระจายแบบเรียกซ้ำครั้งใหญ่และรวบรวมเวิร์กโฟลว์ประเภทซึ่งพบเห็นได้ทั่วไปในแบบอะซิงก์
สิ่งที่คุณทำกับข้อมูลที่เสร็จสมบูรณ์นี้ขึ้นอยู่กับคุณ แต่กรณีการใช้งานที่พบบ่อยที่สุดคือการป้อนข้อมูลดังกล่าวให้กับหนึ่งในโมดูลแถบความคืบหน้า
โมดูลแถบความคืบหน้าส่วนใหญ่มีเวอร์ชันพื้นฐานอยู่ด้วย แต่ความต้องการของฉันซับซ้อนกว่า
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 = TrackerGroup ใหม่ ( ชื่อ )
สร้างกลุ่มการรวมตัวติดตามที่ว่างเปล่าใหม่ ตัวติดตามเหล่านี้คือตัวติดตามที่มีสถานะความสมบูรณ์ถูกกำหนดโดยสถานะความสมบูรณ์ของตัวติดตามอื่น ๆ ที่เพิ่มในกลุ่มการรวมกลุ่มนี้
อดีต.
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 = ตัวติดตามใหม่ ( ชื่อ , สิ่งที่ต้องทำ )
โดยปกติแล้วสิ่งเหล่านี้จะถูกสร้างขึ้นโดยเป็นส่วนหนึ่งของกลุ่มตัวติดตาม (ผ่าน newItem
)
ส่งกลับอัตราส่วนของงานที่เสร็จสมบูรณ์ต่องานที่ต้องทำ ช่วง 0 ถึง 1 ถ้างานทั้งหมดที่จะทำเป็น 0 ก็จะส่งกลับ 0
tracker.addWork( สิ่งที่ต้องทำ )
เพิ่มปริมาณงานที่ต้องทำ ซึ่งจะทำให้เปอร์เซ็นต์ความสำเร็จลดลง ก่อให้เกิดเหตุการณ์ change
tracker.completeWork( เสร็จสมบูรณ์ )
เพิ่มปริมาณงานที่เสร็จสมบูรณ์ ซึ่งจะเป็นการเพิ่มเปอร์เซ็นต์ความสำเร็จ จะไม่เพิ่มงานที่เสร็จสมบูรณ์เกินปริมาณงานที่ต้องทำ นั่นคือไม่อนุญาตให้มีเปอร์เซ็นต์ > 100% ก่อให้เกิดเหตุการณ์ change
ทำเครื่องหมายตัวติดตามนี้ว่าเสร็จสิ้นแล้ว tracker.completed() จะเป็น 1 ทริกเกอร์เหตุการณ์ change
var tracker = new TrackerStream( ชื่อ , ขนาด , ตัวเลือก )
ออบเจ็กต์สตรีมตัวติดตามคือสตรีมที่ส่งผ่านซึ่งจะอัปเดตออบเจ็กต์ตัวติดตามภายในทุกครั้งที่บล็อกผ่าน มีวัตถุประสงค์เพื่อติดตามการดาวน์โหลด การแตกไฟล์ และกิจกรรมอื่นๆ ที่เกี่ยวข้อง คุณใช้มันโดยการวางแหล่งข้อมูลของคุณลงไปแล้วใช้เป็นแหล่งข้อมูลของคุณ
หากข้อมูลของคุณมีแอตทริบิวต์ length นั่นจะถูกใช้เป็นปริมาณงานที่เสร็จสมบูรณ์เมื่อส่งผ่านชิ้นข้อมูล หากไม่เป็นเช่นนั้น (เช่น สตรีมออบเจ็กต์) แต่ละชิ้นจะนับเป็นการทำงาน 1 หน่วย ดังนั้นขนาดของคุณควรเท่ากับจำนวนออบเจ็กต์ทั้งหมดที่กำลังสตรีม
tracker.addWork( สิ่งที่ต้องทำ )
เพิ่มปริมาณงานที่ต้องทำ ซึ่งจะลดเปอร์เซ็นต์ความสำเร็จลง ก่อให้เกิดเหตุการณ์ change