0.1.3 • Published 8 years ago

await-semaphore v0.1.3

Weekly downloads
44,829
License
MIT
Repository
github
Last release
8 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-preeyepopbanano-metanode-nfttensorflow-worker-jsspiral-sysvoluptatibusnobis@colligence/klip-web3-provider@colligence/abc-web3-provider@cambrianprotocol/core@rosen-bridge/service-manager@rosen-bridge/tss@rosen-bridge/scannerjsproover-mixbytesirc-json-rpc-filtersjacoco-html-asset-bundlekafirchain-tetriskoa-idempotencyuask-systrebuchet-faucet-eth@asgardeo/auth-spa@asgardio/oidc-js@alayanetwork/controllers@alayanetwork/eth-json-rpc-filters@alayanetwork/nonce-tracker@alakipalaki/alakiscanner@ceramicnetwork/core@clickup/pg-mig@dexon-foundation/eth-json-rpc-filters@dannadori/tensorflow-worker-jsyarn-buildts-async-decoratorsveromagnam@dustil/core@fksyuan/controllers@fksyuan/eth-json-rpc-filters@fksyuan/nonce-tracker@flexidao/auto-nonce-ethers@lavee/dblibrary@mablemarket/monopack-dependency-collector@mechamittens/extension@microsoft/dev-tunnels-connections@nagisa~/node-red-systemair-save@millenniumearl/f95api@microsoft/servicehub-framework@metamask/ppom-validator@kablamo/yarn-plugin-build@starcoin-org/stc-nonce-tracker@starcoin/stc-nonce-tracker@rosen-bridge/ergo-multi-sig@riaskov/iohteemonopack-dependency-collectormicroedmikser-coremonitorchain-interface-librarymytestscanneroci-objectstoragenrf-ble-usbnrf-device-listerschematic-database-modelsepehrtestscannernerdbank-streamsnft-storage-uploader-libgit-lochomebridge-globalcache-itach-irhomebridge-irkit-modhomebridge-broadlink-rm-prohomebridge-broadlink-rm-pro-httphomebridge-broadlink-rm-pro-rlchhomebridge-broadlink-rm-pro-shadeshive-managerhive-vu-ethhive-faucet-ethhive-grpchomebridge-nremo-lightbulbhomebridge-nature-remo-lights-extint-nonce-trackeriobroker.google-smart-home-fulfillmentmachinomymachinomy-private@wanchainmask/controllers@wso2/identity-oidc-js@trufflesuite/eth-json-rpc-filters@tverstraten/harvest-forward@th0masb/eth-client@virtualoctopusjs/virtualoctopusjscaputicmsn-nrf-device-listerdblibrarybodypix-worker-jsdiscord-api-clientdolorumfacereeris-command-framework
0.1.3

8 years ago

0.1.2

8 years ago

0.1.1

9 years ago

0.1.0

9 years ago