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 state++; 74 // finalCallback part 2 75 assert.strictEqual(state, 11); 76 done(); 77 }, 1), 78 flush: common.mustCall(function(done) { 79 state++; 80 // fluchCallback part 1 81 assert.strictEqual(state, 12); 82 process.nextTick(function() { 83 state++; 84 // fluchCallback part 2 85 assert.strictEqual(state, 15); 86 done(); 87 }); 88 }, 1) 89}); 90t.on('finish', common.mustCall(function() { 91 state++; 92 // finishListener 93 assert.strictEqual(state, 13); 94}, 1)); 95t.on('end', common.mustCall(function() { 96 state++; 97 // endEvent 98 assert.strictEqual(state, 16); 99}, 1)); 100t.on('data', common.mustCall(function(d) { 101 // dataListener 102 assert.strictEqual(++state, d + 1); 103}, 3)); 104t.write(1); 105t.write(4); 106t.end(7, common.mustCall(function() { 107 state++; 108 // endMethodCallback 109 assert.strictEqual(state, 14); 110}, 1)); 111