12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- const Promise = require('bluebird');
- const { isObject } = require('./objectUtils');
- function isPromise(obj) {
- return isObject(obj) && typeof obj.then === 'function';
- }
- // Call `func` after `obj` has been resolved. Call `func` synchronously if
- // `obj` is not a promise for performance reasons.
- function after(obj, func) {
- if (isPromise(obj)) {
- return obj.then(func);
- } else {
- return func(obj);
- }
- }
- // Return `returnValue` after `obj` has been resolved. Return `returnValue`
- // synchronously if `obj` is not a promise for performance reasons.
- function afterReturn(obj, returnValue) {
- if (isPromise(obj)) {
- return obj.then(() => returnValue);
- } else {
- return returnValue;
- }
- }
- // Map `arr` with `mapper` and after that return `returnValue`. If none of
- // the mapped values is a promise, return synchronously for performance
- // reasons.
- function mapAfterAllReturn(arr, mapper, returnValue) {
- const results = new Array(arr.length);
- let containsPromise = false;
- for (let i = 0, l = arr.length; i < l; ++i) {
- results[i] = mapper(arr[i]);
- if (isPromise(results[i])) {
- containsPromise = true;
- }
- }
- if (containsPromise) {
- return Promise.all(results).return(returnValue);
- } else {
- return returnValue;
- }
- }
- module.exports = {
- isPromise,
- after,
- afterReturn,
- mapAfterAllReturn
- };
|