JSPM

  • Created
  • Published
  • Downloads 111
  • Score
    100M100P100Q73462F
  • License ISC

Common tools collection

Package Exports

  • @planjs/utils

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@planjs/utils) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

utils

npm npm
NPM

Common tools collection doc

Installation

npm i @planjs/utils

Usage

import {
  delay,
  retry,
  pTry,
  sequenceChain,
  nextTick,
  range,
  REG_TEL_PHONE,
  eventCenter,
  TimeoutMap,
} from '@planjs/utils';

// promise utils
async function main() {
  await delay(100);
  function fetchData() {
    return Promise.reject(new Error('testing'));
  }
  await retry(fetchData, { maxAttempts: 3, delayMs: 500 })();
}

const pool = asyncPool({ maxConcurrency: 10 });

const randArr = range(1, 10);

nextTick(async () => {
  const [err, res] = await pTry(main());
  if (!err) {
    console.log(res);
  }
  let start = Date.now();
  await Promise.all(randArr.map((v) => pool.executor(delay(v))));
  // The timer has an accuracy problem
  if (Date.now() - start + 1 >= Math.max(...randArr)) {
    console.log('concurrency');
  }
  const count = (a) => ++a;
  const val = await sequenceChain([range(0, 10).map((v) => count)])(1);
  console.log(val); // 11
});

// commonly used regex
REG_TEL_PHONE.test('132xxxxxxx'); // false

// event center
eventCenter.on('log', console.log);
eventCenter.trigger('log', 'planjs');

// ext obj
const timeoutMap = new TimeoutMap({
  timeout: 200,
  passiveDeletion: true,
  onTimeout(k, v) {
    console.log(`expired key [${k}], val [${v}]`);
  },
});
timeoutMap.set('name', 'fupengl');
delay(201).then(() => timeoutMap.get('name')); // null