promise-queue
Advanced tools
Comparing version 1.0.1 to 2.0.0
@@ -0,1 +1,5 @@ | ||
Version 2.0.0: | ||
* It uses global `Promise` if possible. | ||
* `configure()` accepts Promise constructor according to the spec. | ||
Version 1.0.1: | ||
@@ -2,0 +6,0 @@ * window.query -> window.Queue |
@@ -1,2 +0,2 @@ | ||
/* global define: true */ | ||
/* global define, Promise */ | ||
(function (root, factory) { | ||
@@ -21,3 +21,3 @@ 'use strict'; | ||
*/ | ||
var promiseFactory = function () { | ||
var LocalPromise = typeof Promise !== 'undefined' ? Promise : function () { | ||
return { | ||
@@ -30,5 +30,7 @@ then: function () { | ||
var noop = function () {}; | ||
/** | ||
* @param {*} value | ||
* @returns {{then: Function}} | ||
* @returns {LocalPromise} | ||
*/ | ||
@@ -39,6 +41,6 @@ var resolveWith = function (value) { | ||
} | ||
var promise = promiseFactory(); | ||
(promise.resolve || promise.fulfill).call(promise, value); | ||
return promise; | ||
return new LocalPromise(function (resolve) { | ||
resolve(value); | ||
}); | ||
}; | ||
@@ -55,6 +57,2 @@ | ||
* | ||
* Queue.configure(function () { | ||
* return $.Deferred() || require('vow').promise(); | ||
* }); | ||
* | ||
* var queue = new Queue(1); | ||
@@ -87,6 +85,6 @@ * | ||
* Defines promise promiseFactory | ||
* @param {Function} promiseGenerator | ||
* @param {Function} GlobalPromise | ||
*/ | ||
Queue.configure = function (promiseGenerator) { | ||
promiseFactory = promiseGenerator; | ||
Queue.configure = function (GlobalPromise) { | ||
LocalPromise = GlobalPromise; | ||
}; | ||
@@ -96,21 +94,23 @@ | ||
* @param {Function} promiseGenerator | ||
* @return {{then: Function}} | ||
* @return {LocalPromise} | ||
*/ | ||
Queue.prototype.add = function (promiseGenerator) { | ||
var promise = promiseFactory(); | ||
// Do not queue to much promises | ||
if (this.queue.length >= this.maxQueuedPromises) { | ||
promise.reject(new Error('Queue limit reached')); | ||
return promise; | ||
} | ||
var self = this; | ||
return new LocalPromise(function (resolve, reject, notify) { | ||
// Do not queue to much promises | ||
if (self.queue.length >= self.maxQueuedPromises) { | ||
reject(new Error('Queue limit reached')); | ||
return; | ||
} | ||
// Add to queue | ||
this.queue.push({ | ||
promiseGenerator: promiseGenerator, | ||
promise: promise | ||
// Add to queue | ||
self.queue.push({ | ||
promiseGenerator: promiseGenerator, | ||
resolve: resolve, | ||
reject: reject, | ||
notify: notify || noop | ||
}); | ||
self._dequeue(); | ||
}); | ||
this._dequeue(); | ||
return promise; | ||
}; | ||
@@ -134,3 +134,2 @@ | ||
} | ||
var promise = item.promise; | ||
@@ -145,3 +144,3 @@ this.pendingPromises++; | ||
// It should pass values | ||
(promise.resolve || promise.fulfill).call(promise, value); | ||
item.resolve(value); | ||
}, function (err) { | ||
@@ -152,6 +151,6 @@ // It is not pending now | ||
// It should not mask errors | ||
promise.reject(err); | ||
item.reject(err); | ||
}, function (message) { | ||
// It should pass notifications | ||
promise.notify(message); | ||
item.notify(message); | ||
}); | ||
@@ -158,0 +157,0 @@ |
@@ -5,3 +5,3 @@ { | ||
"name" : "promise-queue", | ||
"version" : "1.0.1", | ||
"version" : "2.0.0", | ||
"contributors" : [ | ||
@@ -16,5 +16,2 @@ { | ||
}, | ||
"dependencies" : { | ||
}, | ||
"devDependencies" : { | ||
@@ -27,3 +24,3 @@ "jshint": "2.1.3", | ||
"sinon": "*", | ||
"vow": "*", | ||
"vow": "0.4.1", | ||
"sinon-chai": "*", | ||
@@ -30,0 +27,0 @@ "mocha-istanbul": "*", |
@@ -1,10 +0,2 @@ | ||
# promise-queue | ||
[![NPM Version](https://badge.fury.io/js/promise-queue.png)] | ||
(https://npmjs.org/package/promise-queue) | ||
[![Build Status](https://travis-ci.org/azproduction/promise-queue.png?branch=master)] | ||
(https://travis-ci.org/azproduction/promise-queue) | ||
[![Coverage Status](https://coveralls.io/repos/azproduction/promise-queue/badge.png?branch=master)] | ||
(https://coveralls.io/r/azproduction/promise-queue) | ||
[![Dependency Status](https://gemnasium.com/azproduction/promise-queue.png)] | ||
(https://gemnasium.com/azproduction/promise-queue) | ||
# promise-queue [![NPM Version](https://badge.fury.io/js/promise-queue.png)](https://npmjs.org/package/promise-queue) [![Build Status](https://travis-ci.org/azproduction/promise-queue.png?branch=master)](https://travis-ci.org/azproduction/promise-queue) [![Coverage Status](https://coveralls.io/repos/azproduction/promise-queue/badge.png?branch=master)](https://coveralls.io/r/azproduction/promise-queue) [![Dependency Status](https://gemnasium.com/azproduction/promise-queue.png)](https://gemnasium.com/azproduction/promise-queue) | ||
@@ -23,7 +15,27 @@ Promise-based queue | ||
### Configure attempt | ||
By default `Queue` tries to use global Promises, but you can specify your own promises. | ||
```js | ||
Queue.configure(function () { | ||
return $.Deferred() || require('vow').promise(); | ||
Queue.configure(require('vow').Promise); | ||
``` | ||
Or use old-style promises approach: | ||
```js | ||
Queue.configure(function (handler) { | ||
var dfd = $.Deferred(); | ||
try { | ||
handler(dfd.resolve, dfd.reject, dfd.progress); | ||
} catch (e) { | ||
dfd.reject(e); | ||
} | ||
return dfd.promise(); | ||
}); | ||
``` | ||
### Queue example | ||
```js | ||
// max concurrent - 1 | ||
@@ -49,1 +61,3 @@ // max queue - Infinity | ||
``` | ||
[Live example](http://jsfiddle.net/RVuEU/) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
62
38629
24
489