Skip to content

Instantly share code, notes, and snippets.

@domenic
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save domenic/9422767 to your computer and use it in GitHub Desktop.
Save domenic/9422767 to your computer and use it in GitHub Desktop.
takeUntil over iterable of promises
function takeUntil(iterable, predicate) {
return takeUntilImpl(iterable[Symbol.iterator](), predicate);
}
function takeUntilImpl(iterator, predicate) {
var nextResolve;
var isDone = false;
var nextPromise = new Promise(r => nextResolve = r);
iterator.next().then(function (value) {
if (!predicate(value)) {
nextResolve({ done: true });
} else {
nextResolve({ done: false, value });
nextPromise = takeUntil(iterator).next();
}
});
return {
next() {
return nextPromise;
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment