0.1.3 • Published 7 years ago

await-semaphore v0.1.3

Weekly downloads
44,829
License
MIT
Repository
github
Last release
7 years ago

await-semaphore

Awaitable semaphore/mutex

A semaphore implementation using ES6 promises and supporting 3 styles:

  • async/await style (needs typescript)
  • thunk style (automatic acquire/release)
  • promise style

Also includes Mutex as a convenience for new Semaphore(1).

API

new Semaphore(count: number)

Create a new semaphore with the given count.

import {Semaphore} from 'await-semaphore';

var semaphore = new Semaphore(10);

semaphore.acquire(): Promise<() => void>

Acquire the semaphore and returns a promise for the release function. Be sure to handle release for exception case.

semaphore.acquire()
.then(release => {
    //critical section...
    doSomething()
    .then(res => {
        //...
        release();
    })
    .catch(err => {
        //...
        release();
    });
});

semaphore.use(thunk: () => Promise): Promise

Alternate method for using the semaphore by providing a thunk. This automatically handles acquire/release.

semaphore.use(() => {
    //critical section...
});

new Mutex()

An alias for new Semaphore(1). Mutex has the same methods as Semaphore.

import {Mutex} from 'await-semaphore';

var mutex = new Mutex();

Examples

Create a version of fetch() with concurrency limited to 10.

async/await style (typescript)

var semaphore = new Semaphore(10);

async function niceFetch(url) {
    var release = await semaphore.acquire();
    var result = await fetch(url);
    release();
    return result;
}

thunk style (javascript)

var semaphore = new Semaphore(10);

function niceFetch(url) {
    return semaphore.use(() => fetch(url));
}

promise style (javascript)

var semaphore = new Semaphore(10);

function niceFetch(url) {
    return semaphore.acquire()
    .then(release => {
        return fetch(url)
        .then(result => {
            release();
            return result;
        });
    });
}
@dannadori/006_handpose-worker-js@ourtradehub/dblibrary@thesis-co/mechamittens-extensionf95api@cloudcue/plugin-rfm69@volley/solid@infinitebrahmanuniverse/nolb-awa@everything-registry/sub-chunk-1191eyepop-preeyepopirc-json-rpc-filtersjacoco-html-asset-bundlehive-vu-ethhive-managerhive-faucet-ethhive-grpchomebridge-nature-remo-lights-exthomebridge-nremo-lightbulbhomebridge-globalcache-itach-irjsproover-mixbyteskafirchain-tetrisiobroker.google-smart-home-fulfillmenthomebridge-irkit-modhomebridge-broadlink-rm-prohomebridge-broadlink-rm-pro-httphomebridge-broadlink-rm-pro-shadesmachinomymachinomy-privategit-locint-nonce-trackereris-command-frameworkembedded-queueeth-scifacemesh-worker-jsgabagavvaoci-objectstoragekoa-idempotencynrf-device-listernrf-ble-usbnft-storage-uploader-libnerdbank-streamsmytestscannermikser-coremonopack-dependency-collectormicroedmonitorchain-interface-libraryschematic-database-modelsepehrtestscannertensorflow-worker-jsuask-systs-async-decoratorstrebuchet-faucet-eth@fksyuan/nonce-tracker@fksyuan/controllers@fksyuan/eth-json-rpc-filtersvoluptatibusnobis@microsoft/dev-tunnels-connections@metamask/ppom-validator@millenniumearl/f95api@microsoft/servicehub-framework@lavee/dblibrary@mablemarket/monopack-dependency-collector@mechamittens/extension@rosen-bridge/scanner@rosen-bridge/service-manager@rosen-bridge/tss@nagisa~/node-red-systemair-savespiral-sys@dustil/coreveromagnamyarn-build@kablamo/yarn-plugin-build@flexidao/auto-nonce-ethers@wanchainmask/controllers@trufflesuite/eth-json-rpc-filters@virtualoctopusjs/virtualoctopusjs@asgardeo/auth-spa@asgardio/oidc-js@alayanetwork/nonce-tracker@alakipalaki/alakiscanner@alayanetwork/controllers@alayanetwork/eth-json-rpc-filters@ceramicnetwork/core@wso2/identity-oidc-js@cambrianprotocol/core@starcoin/stc-nonce-tracker@starcoin-org/stc-nonce-tracker@tverstraten/harvest-forward@th0masb/eth-client@clickup/pg-mig@dannadori/tensorflow-worker-js@colligence/abc-web3-provider@colligence/klip-web3-providerbanano-metanode-nft@dexon-foundation/eth-json-rpc-filterscmsn-nrf-device-listerbodypix-worker-jscaputidiscord-api-client
0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

8 years ago

0.1.0

8 years ago