Skip to content

Instantly share code, notes, and snippets.

@aurimasv
Created October 6, 2014 22:04
Show Gist options
  • Save aurimasv/d50858789496c7333f68 to your computer and use it in GitHub Desktop.
Save aurimasv/d50858789496c7333f68 to your computer and use it in GitHub Desktop.
var items = [],
nextItem = Zotero.Promise.defer();
var generator = function* () {
let i=0;
while (i<items.length || nextItem) {
for (; i<items.length; i++) {
yield items[i];
}
if (nextItem) {
i = items.length; // The item will get pushed, so skip it later
yield nextItem.promise;
}
}
return Zotero.Promise.resolve();
}
// Items are sent here asynchronously
var someCallbackThatReceivesItems = function(item) {
if (!item) {
// No more items
nextItem.resolve();
nextItem = null;
return;
}
items.push(nextItem.promise);
nextItem.resolve(item);
nextItem = Zotero.Promise.defer();
};
// Iterate through items
Zotero.Promise.coroutine(function *(){
let iterator = generator();
let item;
while (item = yield iterator.next().value) {
Zotero.debug("got item");
}
Zotero.debug("done!");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment