From 73dd122d2e462c09e8e99378e69a502ebd14ee2d Mon Sep 17 00:00:00 2001 From: jackie_wu Date: Mon, 31 Aug 2020 20:06:00 +0800 Subject: [PATCH] package init --- nodejs-p-limit.spec | 49 ++++++++++++++++++++++++++++++++++++++++++++ p-limit-1.1.0.tgz | Bin 0 -> 2031 bytes test.js | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 nodejs-p-limit.spec create mode 100644 p-limit-1.1.0.tgz create mode 100644 test.js diff --git a/nodejs-p-limit.spec b/nodejs-p-limit.spec new file mode 100644 index 0000000..33a257c --- /dev/null +++ b/nodejs-p-limit.spec @@ -0,0 +1,49 @@ +%{?nodejs_find_provides_and_requires} +%global packagename p-limit +%global enable_tests 0 +Name: nodejs-p-limit +Version: 1.1.0 +Release: 1 +Summary: Run multiple promise-returning & async functions with limited concurrency +License: MIT +URL: https://github.com/sindresorhus/p-limit +Source0: https://registry.npmjs.org/%{packagename}/-/%{packagename}-%{version}.tgz +Source1: https://raw.githubusercontent.com/sindresorhus/p-limit/v%{version}/test.js +ExclusiveArch: %{nodejs_arches} noarch +BuildArch: noarch +BuildRequires: nodejs-packaging +%if 0%{?enable_tests} +BuildRequires: npm(ava) +%endif +%description +Run multiple promise-returning & async functions with limited concurrency + +%prep +%autosetup -n package +cp -p %{SOURCE1} . + +%build + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} +cp -pr package.json index.js \ + %{buildroot}%{nodejs_sitelib}/%{packagename} +%nodejs_symlink_deps + +%check +%nodejs_symlink_deps --check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +%{_bindir}/ava +%else +%{_bindir}/echo -e "\e[101m -=#=- Tests disabled -=#=- \e[0m" +%endif + +%files +%doc readme.md +%license license +%{nodejs_sitelib}/%{packagename} + +%changelog +* Mon Aug 31 2020 wutao - 1.1.0-1 +- Package init diff --git a/p-limit-1.1.0.tgz b/p-limit-1.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6fd05aca39426fe2cb231920300411db46e25171 GIT binary patch literal 2031 zcmVBp=wgXpR>3APF^Z-aU`+U{XK$=+9X*&7X}A zO7Lf2c(q!s=llCW&%@^j=GofK_qf^z`)zpE-fOk@584N~dDfy0;eBaE9$J~wzC>02 zQ$D#duzLQFtiM_STijo;trxJB){}S<>#Z6Aub5P^-~?|s+KpBY4VemLoa*Al%Q!5u zM8|2uAeCYfD^{0GXOhQ!4nKgemOOx2#seZza2@Lij1(3^Ab5~T$#}5LxhHYJxH7t& zyW<=tSt?YlgG$&{y z5Q`EmllPF!F`j-hLK&aOoT&||A~aHuUhl85a+hsjX{Iz`-3a&reRSooac6O2_+93h zD4E^hTS*A-4Z=sZycROtz$yG*D!ukexnW_sz3Xw(C6Yqxgl+Eq6}|NJ>SXHcAlf{* zB}x10WBL1+jAbh_69TKvwZA4Q6kpxSG|AXBmf_mikX?0I%Fqcsh&TOAK0^oop(G7i z;+p{ZOS`exXqVua*QL+rtT<^EVQlp0p;**ouJ51ec){u__4)my8_9*}Fwx1t9<^ON7b~434X&DE4 z=cTm}VV1B4yGe!A3SMt!Xn1{uabAgMU~fWSLAy%u3gwM!;OrX4%al1%3Tf{+Hz^A! z)lW8PCZGjO8Ti1n#gs{yVIF`s;2Q~9x>J2=RX$l(1u2vUlS)vN%l8OQmh z8P^DIya(fPk3SlPDl=|Z8#-d#rd{RAPgdBK zO2OVns8I+P8EF?AOhEKtQr@B=O>6`{NJ9VS#;qK(>Cji3H(q!K%_#fv_6{9kllUq!}m=l|XI-l56=t-ZtDgWZ&(X$3vN8=einK3KPrb(=#8iX;io@N?>ih#!HHL{~ABq)|7 z7IMH&7mTfI?FjNQK$jVbR2v9F=rfTd;+jmu zoFB$!K6_zV6cPSZTrp!y9t2!yR5e$DE+AdsYH_3@KS`*l=MF=;F}Da*nj=X(zH3~^ zSmUU_F!SIYGaD%X%z@G1bo{pCIpB_9=nZ~$yG|FjIwRa~)!?l=J{w$&0WrKzfBX&x zr_kxYgP+`fw+7Cihn_PU!N9ZJ^I^|*5a#wzdKX={{|1hcu0OzdcQMeB>39Gnuwdmn zBVu;$cqeDL?Hs#3cl@qqox0;b@jM-P(1Bsc8@neLy^aUN3vW0WIVir1Z2NBi)I%xG zxzisvP%6T}`58AbI_va$B+BYsp!Oc=2PcE!JI{S{Hiol7uj?T2*g?%Y$2}((g+`t9 zI_`N5x}EdR8^=%$kc(##TCN?uJ#z>|@;dnEWb6+5WX8#$KlX52Lo2=UiuA2Ja%#}= z+z~nC)Ek`FEOIAO3=9*b>pM9Yay8t#5k#T=#mHGPgs#)+Auqh1{;lh4Jaq#9?W?T+ zlKJ6+H5TDlknx%Ne{h(8|7$%rJ-{K=|GoC^Q~m!IYa5D>XmI(v%i}CgLKtCn%hY>2 z(mGWynoTYJt60^8xFO`c`OpWrhPs;naf(Gfh+Z#zrJ1b$JLK3V9Kjd+l4x1h_BOaU zfMNNutjT0z{T_I_z=C8zP_HW=t6L%5AQ+Mhg)f33_@JzOf=heGHLtNJ_$7-avv&$A z8d3|Kq(I4W?e_X4=4nPJmpHhZvwResF&#uBv0zwA`P|-_39(bH)_xml>dX5`p;%*7 zs}@ekRItz5Gi1 z7y%_N$ru;EAM;A(l0r5W2zivG5|<=(i{Fozg!l0nA&5r&DM36YFRWas@ij0`73RMy zuvB|P%hWf|f;qum~wB~q!GWy<$|7ks~r}clo N{sj=1n5h6D002&x { + const input = [ + [10, 300], + [20, 200], + [30, 100] + ]; + + const end = timeSpan(); + const limit = m(1); + const mapper = ([val, ms]) => limit(() => delay(ms).then(() => val)); + + t.deepEqual(await Promise.all(input.map(mapper)), [10, 20, 30]); + t.true(inRange(end(), 590, 650)); +}); + +test('concurrency: 4', async t => { + const concurrency = 5; + let running = 0; + + const limit = m(concurrency); + + const input = Array(100).fill(0).map(() => limit(async () => { + running++; + t.true(running <= concurrency); + await delay(randomInt(30, 200)); + running--; + })); + + await Promise.all(input); +});