"use strict"; const Promise = require("bluebird"); module.exports = function runDisposableQueue(items, processingCallback) { let itemIndex = 0; // FIXME: overflow function processItem() { let disposeFlag = false; return Promise.try(() => { let item = items[itemIndex]; itemIndex += 1; return processingCallback(item, () => { disposeFlag = true; }); }).then(() => { if (disposeFlag === false && itemIndex < items.length) { return processItem(); } }); } return processItem(); };