Package Exports
- @planjs/utils
- @planjs/utils/es/index.js
- @planjs/utils/lib/index.js
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
🔧 contactInfoDefault doc
Installation
npm i @planjs/utilsUsage
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 = 0) => ++a;
const val = await sequenceChain([...range(0, 10).map((v) => [count])])();
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