asyncstreamarray
v1.0.2
Published
Массив с возможностью асинхронного вывода элементов
Downloads
3
Maintainers
Readme
AsyncStreamArray
Содержание
Установка
Установка с NPM
npm -i asynciteratearrayЗачем
Представим что в программу в асинхронном режиме поступают данные по сети, и все эти данные вам необходимо обработать. Обработка также может занять произвольное время. С помощю данного класса это можно реализовать в нескольколько строчек.
Использование
Этот класс расширяет классические массивы, добовляя к ним возможность асинхронной передачей элементов для далнейшей обработки. Если обработка элементов не производится или по каким либо причина отложена - то экземпляр класса накапливает элементы в себе. Так как класс расширяет встроенный класс Array - то для вставки можно использовать любой метод для вставки элементов в массив.
Вывод элементов происходит в асинхронном режиме. Это позволяет делать перебор вывод элементов массива в любом месте кода в любое время выполнения, независимо от того, определён ли перебор до или после помещения элементов в массив. Единственное ограничение - потребно указать функцию в которую будут передоватся элементы итерируемого массива.
ПРИМЕР
const AsyncIterateArray = require("asynciteratearray");
var asarr = new AsyncIterateArray();
// Эта функция потребна только для удобства имитации асинхронного ввода
async function insert(val, arr) {
//Иметация асинхронности
await new Promise(resolve => setTimeout(resolve, 100));
arr.push(val);
}
//В эту функцюю будут передавтся элементы итерируемого массива
async function output(value) {
console.log(value);
}
//Асинхронная функция обёртка. Может иметь любое имя.
async function main() {
asarr.stream = output;
asarr.iterate = true;
await insert(5, asarr);
await insert(7, asarr);
await insert(9, asarr);
await asarr.empty();
asarr.iterate = false;
}
main()В классе определён асинхронный итератор. Он позволяет использовать для перебора и вывода элементов встроенный оператор for await of. Ограничение - перебор лучше делать в отдельной асинхронной функции. Оно вызвано концепциеё самого язык всё кроме кода выполняется асинхронно
ПРИМЕР
const AsyncIterateArray = require("asynciteratearray");
var asarr = new AsyncIterateArray();
// Эта функция потребна только для удобства имитации асинхронного ввода
async function insert(val, arr) {
//Иметация асинхронности
await new Promise(resolve => setTimeout(resolve, 100));
arr.push(val);
}
//В эту функцюю будут передавтся элементы итерируемого массива
async function output(value) {
console.log(value);
}
//Асинхронная функция обёртка. Может иметь любое имя.
async function main() {
let asarr = new AsyncIterateArray();
//console.log(asarr1);
(async () => {
for await (let val of asarr1) {
console.log(val)
}
})();
await insert(8, asarr);
await insert(10, asarr);
await insert(15, asarr);
await asarr.empty();
asarr.iterate = false;
}
main()После начала перебора и вывода элементов - класс находится в постоянном режиме ожидания новых данных. Чтобы остановить цикл ожидание - свойству itarate потребно присвоить значение false. Для определения пустоты массива потребно вызвать функцию empty. Подробности смотри раздел API
API
constructor
- AsyncIterateArray(...args) - параметры и поведение конструктора полностью наследуются от базового класса Array
property
- stream - через это свойство задаётся callback функция которой будет передан извлечённый элемент из массива в виде первого параметра. Функция может быть как синхронной так асинхронной. В это свойство возможно записать только ссылку на функцию. Если будет записано значение другого типа - то будет сгенирорована ошибка о не соответствии типа
- itarate - свойтство аксессор типа boolean - доступное чтения и записи.
- true - Возврат этого значения означает что массив беребирается с последуующим выводом. Запись этого значения - запускает массив на перебор элементов с последующим выводом. Если установка этого значения произойдёт до того как свойство stream будет записано - то будет сгенерироана ошибка сообщающая что свойство stream не является функцией. При примение к массиву оператора for await of - свойтство itarate будет иметь значение true.
- false - возврат этого значения означает что перебор массива с последуующем выводом остановлен. Запись этого значения останавливает перебор массива с последуующем выводом не зависимо от того как он был запущен
- out - свойство принимает ссылку на функцию, которая извлекает элемент из массива. Данная функция будет вызыватся в контексте экземпляра AsyncStreamArray.Значение по умолчанию - Array.pop.Это свойство принимает только функцию. Если попытатся присвоить значение другого тип - то будет сгенерирована ошибка о не соответствии типа
method
- empty - эта функция возвращает промис который успешно завершается когда массив пуст. В функцию обработки завершения будет передан сам экземпляр AsyncStreamArray
