2017-02-20 12 views
2

я вижу в том, что преобразование потоков в API Node.js поток использует асинхронную функцию для преобразования ломти, когда они прибывают: https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callbackПоддерживает ли Node.js Stream Transform порядок кусков?

ли Transform поток посылает куски в том же порядке, как они поступают? Потому что с асинхронной функцией это явно не так.

ответ

3

Короткий ответ: да, поток преобразования гарантирует, что куски отправляются в том же порядке. (Потому что потоки могут быть использованы для операций порядка чувствительно (для шифрования или архивирования-разархивирования файлов)

Вот является пропущено, что вы могли бы работать, чтобы убедиться:

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

 Смежные вопросы

  • Нет связанных вопросов^_^