breakable

1.0.0 • Public • Published

breakable.js

Break out of functions, recursive or not, in a more composable way than by using exceptions explicitly. Non-local return.

Usage

You can use breakable to break out of simple loops like this example but note that it is often simpler to just use .some instead. Anyways, here's a minimal example.

var breakable = require("breakable");
 
breakable(function(brk) {
    arr.forEach(function(v) {
        if (...) {
           brk();
        }
    });
});

Pass a value to brk and it becomes the return-value of breakable.

breakable is useful when you want to break out of a deep recursion, passing a value, without riddling your code with exception ceremony.

Instead of:

var esprima = require("esprima").parse;
var traverse = require("ast-traverse");
var ast = esprima("f(!x, y)");
 
var val;
try {
    traverse(ast, {pre: function(node) {
        if (node.type === "UnaryExpression" && node.operator === "!") {
            val = node.argument;
            throw 0;
        }
    }});
} catch(e) {
    if (val === undefined) {
        throw e; // re-throw if it wasn't our exception
    }
}
 
console.dir(val); // { type: 'Identifier', name: 'x' }

you use breakable and do:

var breakable = require("breakable");
var esprima = require("esprima").parse;
var traverse = require("ast-traverse");
var ast = esprima("f(!x, y)");
 
var val = breakable(function(brk) {
    traverse(ast, {pre: function(node) {
        if (node.type === "UnaryExpression" && node.operator === "!") {
            brk(node.argument);
        }
    }});
});
 
console.dir(val); // { type: 'Identifier', name: 'x' }

Installation

Node

Install using npm

npm install breakable
var breakable = require("breakable");

Browser

Clone the repo and include it in a script tag

git clone https://github.com/olov/breakable.git
<script src="breakable/breakable.js"></script>

Package Sidebar

Install

npm i breakable

Weekly Downloads

74,981

Version

1.0.0

License

MIT

Last publish

Collaborators

  • olov