1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4 5const stream = require('stream'); 6let state = 0; 7 8/* 9What you do 10const stream = new stream.Transform({ 11 transform: function transformCallback(chunk, _, next) { 12 // part 1 13 this.push(chunk); 14 //part 2 15 next(); 16 }, 17 final: function endCallback(done) { 18 // part 1 19 process.nextTick(function () { 20 // part 2 21 done(); 22 }); 23 }, 24 flush: function flushCallback(done) { 25 // part 1 26 process.nextTick(function () { 27 // part 2 28 done(); 29 }); 30 } 31}); 32t.on('data', dataListener); 33t.on('end', endListener); 34t.on('finish', finishListener); 35t.write(1); 36t.write(4); 37t.end(7, endMethodCallback); 38 39The order things are called 40 411. transformCallback part 1 422. dataListener 433. transformCallback part 2 444. transformCallback part 1 455. dataListener 466. transformCallback part 2 477. transformCallback part 1 488. dataListener 499. transformCallback part 2 5010. finalCallback part 1 5111. finalCallback part 2 5212. flushCallback part 1 5313. finishListener 5414. endMethodCallback 5515. flushCallback part 2 5616. endListener 57*/ 58 59const t = new stream.Transform({ 60 objectMode: true, 61 transform: common.mustCall(function(chunk, _, next) { 62 // transformCallback part 1 63 assert.strictEqual(++state, chunk); 64 this.push(state); 65 // transformCallback part 2 66 assert.strictEqual(++state, chunk + 2); 67 process.nextTick(next); 68 }, 3), 69 final: common.mustCall(function(done) { 70 state++; 71 // finalCallback part 1 72 assert.strictEqual(state, 10); 73 setTimeout(function() { 74 state++; 75 // finalCallback part 2 76 assert.strictEqual(state, 11); 77 done(); 78 }, 100); 79 }, 1), 80 flush: common.mustCall(function(done) { 81 state++; 82 // flushCallback part 1 83 assert.strictEqual(state, 12); 84 process.nextTick(function() { 85 state++; 86 // flushCallback part 2 87 assert.strictEqual(state, 15); 88 done(); 89 }); 90 }, 1) 91}); 92t.on('finish', common.mustCall(function() { 93 state++; 94 // finishListener 95 assert.strictEqual(state, 13); 96}, 1)); 97t.on('end', common.mustCall(function() { 98 state++; 99 // end event 100 assert.strictEqual(state, 16); 101}, 1)); 102t.on('data', common.mustCall(function(d) { 103 // dataListener 104 assert.strictEqual(++state, d + 1); 105}, 3)); 106t.write(1); 107t.write(4); 108t.end(7, common.mustCall(function() { 109 state++; 110 // endMethodCallback 111 assert.strictEqual(state, 14); 112}, 1)); 113