Skip to content

Instantly share code, notes, and snippets.

@simenbrekken
Created November 20, 2014 08:48
Show Gist options
  • Select an option

  • Save simenbrekken/a72de4e0b7f323541507 to your computer and use it in GitHub Desktop.

Select an option

Save simenbrekken/a72de4e0b7f323541507 to your computer and use it in GitHub Desktop.
Promise Task Scheduler
var Promise = require('bluebird')
var lodash = require('lodash')
var _queue = {}
function addTask(key, promiseFactory, leading, wait) {
if (!key) {
throw new Error('Missing key: ' + key)
}
var resolve
var reject
var promise = new Promise(function(deferredResolve, deferredReject) {
resolve = deferredResolve
reject = deferredReject
})
var task = _queue[key]
if (!task) {
var callback = function(promiseFactory, resolve, reject) {
promiseFactory().then(resolve, reject)
}
var options = {
leading: leading,
trailing: true
}
task = lodash.debounce(callback, wait || 500, options)
_queue[key] = task
}
task(promiseFactory, resolve, reject)
return promise
}
addTask('a', function() {
return Promise.resolve('foo')
}).then(function(result) {
console.log(result)
})
addTask('a', function() {
return Promise.resolve('bar')
}).then(function(result) {
console.log(result)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment