summaryrefslogtreecommitdiffstats
path: root/lib/utils/promise.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-04-25 10:32:44 +0200
committerSamy Pessé <samypesse@gmail.com>2016-04-25 10:32:44 +0200
commit4646ed8f4af184a33280d8fe1f978c7da5404725 (patch)
treeb8c3102e539e4ff72a10536dd626c94ac5501b0c /lib/utils/promise.js
parent3f5c8acb3cdbf71c429ad331d23698cc53358746 (diff)
downloadgitbook-4646ed8f4af184a33280d8fe1f978c7da5404725.zip
gitbook-4646ed8f4af184a33280d8fe1f978c7da5404725.tar.gz
gitbook-4646ed8f4af184a33280d8fe1f978c7da5404725.tar.bz2
Fix plugins loading
Diffstat (limited to 'lib/utils/promise.js')
-rw-r--r--lib/utils/promise.js36
1 files changed, 34 insertions, 2 deletions
diff --git a/lib/utils/promise.js b/lib/utils/promise.js
index b0cfb34..b8ab63c 100644
--- a/lib/utils/promise.js
+++ b/lib/utils/promise.js
@@ -9,7 +9,7 @@ var Immutable = require('immutable');
@return {Promise<Mixed>}
*/
function reduce(arr, iter, base) {
- arr = Immutable.List(arr);
+ arr = Immutable.Iterable.isIterable(arr)? arr : Immutable.List(arr);
return arr.reduce(function(prev, elem, i) {
return prev.then(function(val) {
@@ -74,7 +74,7 @@ function some(arr, iter) {
@param {Function(element, index)}
@return {Promise<List>}
*/
-function map(arr, iter) {
+function mapAsList(arr, iter) {
return reduce(arr, function(prev, entry, i) {
return Q(iter(entry, i))
.then(function(out) {
@@ -85,6 +85,38 @@ function map(arr, iter) {
}
/**
+ Map an array or map
+
+ @param {Array|List|Map|OrderedMap} arr
+ @param {Function(element, key)}
+ @return {Promise<List|Map|OrderedMap>}
+*/
+function map(arr, iter) {
+ if (Immutable.Map.isMap(arr)) {
+ var type = 'Map';
+ if (Immutable.OrderedMap.isOrderedMap(arr)) {
+ type = 'OrderedMap';
+ }
+
+ return mapAsList(arr, function(value, key) {
+ return Q(iter(value, key))
+ .then(function(result) {
+ return [key, result];
+ });
+ })
+ .then(function(result) {
+ return Immutable[type](result);
+ });
+ } else {
+ return mapAsList(arr, iter)
+ .then(function(result) {
+ return Immutable.List(result);
+ });
+ }
+}
+
+
+/**
Wrap a fucntion in a promise
@param {Function} func