npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

asyncstreamarray

v1.0.2

Published

Массив с возможностью асинхронного вывода элементов

Downloads

3

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