Package Exports
- breakable
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 (breakable) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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 breakablevar 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>