Flujo legible de JavaScript
-
Instalar
ReadableStream
en JavaScript -
Ejemplo de
ReadableStream
usando.getReader()
-
Ejemplo de
ReadableStream
usando la APIFetch
Un ReadableStream
es un objeto de JavaScript que le permite leer datos de una fuente en forma de flujo. A menudo se usa para leer grandes cantidades de datos, como un archivo o un flujo de red, y se puede usar junto con otras API, como la API Fetch
o el objeto Response
en el navegador.
Para crear un ReadableStream
, puede usar el constructor new ReadableStream()
, que toma una fuente y algunas opciones como argumentos. Luego puede usar el método .getReader()
de la secuencia para obtener un objeto lector
, que puede usar para leer los datos de la secuencia usando métodos como .read()
y .cancel()
.
Uno de los beneficios clave de usar un ReadableStream
es que le permite procesar los datos a medida que se leen en lugar de esperar a que todo el flujo se cargue por completo. Esto puede ser especialmente útil cuando se trabaja con grandes conjuntos de datos o cuando se leen datos de una fuente lenta.
En general, ReadableStream
es una herramienta poderosa para trabajar con transmisión de datos en JavaScript y puede ser una adición útil a su conjunto de herramientas al desarrollar aplicaciones web.
Instalar ReadableStream
en JavaScript
El constructor ReadableStream
no es parte de la API central de JavaScript, pero hay bibliotecas disponibles que brindan esta funcionalidad. Una biblioteca popular es el paquete readable-stream
.
Para usar el paquete readable-stream
en su proyecto Node.js, puede instalarlo usando npm
ejecutando el siguiente comando:
npm install readable-stream
Luego, en su código, puede importar la clase Readable
y usarla para crear un nuevo objeto ReadableStream
.
const {Readable} = require('readable-stream');
Ejemplo de ReadableStream
usando .getReader()
Aquí hay un ejemplo de cómo crear un ReadableStream
y leer datos usando el método .getReader()
.
En este ejemplo, el método start
utiliza una función setTimeout
para insertar de forma asincrónica nuevos valores en la secuencia cada 100 milisegundos.
Este código crea un ReadableStream
que genera una serie de números, comenzando en 0
y terminando en 99
. La secuencia se crea utilizando el método inicio
, que se llama cada vez que la secuencia está lista para comenzar a leer datos.
El método .getReader()
se usa para obtener un objeto lector
, que luego se usa en una función async
para leer los datos de la transmisión. El método .read()
se llama repetidamente en un bucle, y el bucle finaliza cuando la propiedad done
del objeto devuelto es true
, lo que indica que la transmisión se ha cerrado.
// const { Readable } = require("readable-stream");
const stream = new ReadableStream({
start(controller) {
let i = 0;
function push() {
controller.enqueue(i++);
if (i < 100) {
setTimeout(push, 100);
} else {
controller.close();
}
}
push();
},
});
const reader = stream.getReader();
(async function read() {
while (true) {
const {value, done} = await reader.read();
if (done) {
break;
}
console.log(value);
}
})();
Producción:
Ejemplo de ReadableStream
usando la API Fetch
Aquí hay otro ejemplo del uso de un ReadableStream
, esta vez usando la API Fetch
para leer datos de un recurso remoto.
En este ejemplo, usamos la función buscar
para solicitar un recurso remoto y obtener un objeto Respuesta
. El objeto Response
tiene una propiedad body
que es un ReadableStream
, que podemos usar para leer los datos de la respuesta.
Luego usamos el método .getReader()
para obtener un objeto lector
y leer los datos de la secuencia usando la misma función async
que en el ejemplo anterior. Esta vez, los datos que se leen son los contenidos del archivo file.txt
en el servidor.
const {Readable} = require('readable-stream');
(async function read() {
const response = await fetch("http://example.com/file.txt");
const stream = response.body;
const reader = stream.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
console.log(value);
}
})();
Producción:
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn