Socket
Book a DemoInstallSign in
Socket

@vovikilelik/task-queue-js

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vovikilelik/task-queue-js

The easy way to implement a client-server API

npmnpm
Version
1.0.0-rc.1
Version published
Weekly downloads
0
-100%
Maintainers
1
Weekly downloads
 
Created
Source

Task-queue-js

Библиотека для организации клиентского API.

Установка

  • Git git clone http://git.vovikilelik.com/Clu/task-queue-js.git
  • Npm npm i @vovikilelik/task-queue-js

Использование

import { join, all } './task-queue.js';
  • join(...tasks) - Агрегатор для последовательных сценариев
  • all(...tasks) - Агрегатор для параллельных сценариев, как Promise.all()

Каждый агрегатор не вызывает запросы сразу после создания, а только создаёт сценарий, описанный в ...tasks. Для того, чтобы запрос состоялся, нужно вызвать готовый агрегатор, как функцию:

/* Create scenario */
const scenario = join(task1, task2, task3, ...);

/* Execute scenario with various data */
scenario(initData).then(...).catch(...);

Каждый task должен быть функцией, которая принимает результат предыдущей task и возвращает Promise, где в then устанавливается часть данных для текущей задачи. Затем, все части данных будут слиты воедино { ...a, ...b, ...n, ... }.

const task = (prev) => get(`https://${prev.id}`).then(items => ({ items }));

join(task)({ id: 1 }).then(console.log);
> { id: 1, items: [] }

Сценарии и задачи можно комбинировать, а также задавать условия прямо при объявлении аргументов:

join(
  all(
    join(
      all(),
      ...
    ),
  ),
  isValid() && task
);

Если нет необходимости в запросах на сервер, можно сразу передавать готовые данные, как в сценариях, так и в задачах или ничего не возвращать:

const task1 = () => ({ one: 'Hello!' });
const task2 = () => false;
const scenario = join(task1, task2, { two: 'Hi!' });

scenario().then(console.log);
> { one: 'Hello!', two: 'Hi!' }

Примеры

/* An function for make request, do not mind... */
const myFetch = (url) => fetch(`https://${url}`).then(response => response.json());
import { join } './task-queue.js';

/* First task needs to id */
const loadUser = (response) => {
  const { id } = response;

  return myFetch(`user/${id}`)
    .then(json => ({ user: json }));
}

/* Second task needs to wait result of first task */
const loadItems = (response) => {
  const { id, user } = response;

  return myFetch(`metadata/${id}/${user.id}`)
    .then(json => ({ items: json }));
}

/* This tasks will call consistently
   and next task will be accept previous result. */
const getMyTask = join(loadUser, loadItems);
/* It able to various requesting */
getMyTask({ id: '1' }).then(setData);
// { id: '1', user: {...}, items: [] }

getMyTask({ id: '2' }).then(setData);
// { id: '2', user: {...}, items: [] }
...

Keywords

util

FAQs

Package last updated on 08 Apr 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts