2
我看到的是,Node.js的流API在變換流使用異步功能,當他們到達改造大塊: https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callbackNode.js流轉換是否保持塊的順序?
是否變換流發送的塊以相同的順序,他們到達?因爲使用異步函數,這不是明確的情況。
我看到的是,Node.js的流API在變換流使用異步功能,當他們到達改造大塊: https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callbackNode.js流轉換是否保持塊的順序?
是否變換流發送的塊以相同的順序,他們到達?因爲使用異步函數,這不是明確的情況。
簡短的回答是:是的,轉換流保證大塊以相同的順序發送。 (因爲流可能被用於訂單sensative操作(加密,壓縮和解或-解壓文件)
下面是一個剪斷,你可以運行,以確保:
const {Transform} = require('stream');
const _ = require('lodash');
const h = require('highland');
const myTransform = new Transform({
transform(chunk, encoding, callback) {
//Callback fires in a random amount of time 1-500 ms
setTimeout(() => callback(null, chunk), _.random(1, 500));
},
//Using objectMode to pass-trough Numbers, not strings/buffers
objectMode: true
});
//I'm using 'highland' here to create a read stream
//The read stream emits numbers from 1 to 100
h(_.range(1, 100))
.pipe(myTransform)
//Simply logging them as they go out of transform stream
.on('data', chunk => console.log(chunk.toString()));
//The output is:
// 1
// 2
// 3
// 4 ...
//Although the callbacks fire in random order