Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

promise-resolve-deep

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

promise-resolve-deep - npm Package Compare versions

Comparing version
1.0.1
to
1.0.2
+37
benchmark.js
'use strict';
let Benchmark = require('benchmark');
function testPromise(label, Promise) {
require('./index')(Promise)
var suite = new Benchmark.Suite;
suite
.add(`${label}#resolveDeep`, function(deferred) {
Promise.resolveDeep(Promise.resolve({
foo: Promise.resolve({
bar: [Promise.resolve('foo'),Promise.resolve({
xx: Promise.resolve().then(()=>'ala'),
dd: null,
zz: true,
yy: false,
mm: undefined
})]
})
}), {
foo: {bar: ['foo', {xx: 'ala', dd: null, zz: true, yy: false, mm: undefined}]}
}).then(() => deferred.resolve());
}, {defer: true})
// add listeners
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });
}
testPromise('bluebird', require('bluebird'));
testPromise('default', Promise);
'use strict';
module.exports = function setupResolveDeep(Promise) {
let promiseMap = Promise.map || function mapImpl(promiseList, functor) {
return Promise.all(promiseList.map(promiseOrValue =>
Promise.resolve(promiseOrValue).then(functor)
));
};
return Promise.resolveDeep = function resolveNestedPromises(obj) {
return Promise.resolve(obj).then(obj => {
if(Array.isArray(obj)) {
return promiseMap(obj, resolveNestedPromises);
}
else if(obj && typeof obj === 'object' ) {
let promisesToResolve = [];
Object.keys(obj).map(key => {
let promise = resolveNestedPromises(obj[key]).then(val => {
obj[key] = val;
});
promisesToResolve.push(promise)
});
if(promisesToResolve.length) {
return Promise.all(promisesToResolve).then(() => obj);
}
}
return obj;
});
};
};
require('./')(Promise);
var middleware = wrap(() => {
return {
users: [Promise.resolve('dd')],
books: [Promise.resolve('ff')]
};
});
// utilizing Promise.resolveDeep
function wrap(func) {
return (req, res) => {
Promise.resolve().then(() => func())
.then(Promise.resolveDeep).then(data => {
res.json(data);
}).catch(err => res.status(500));
}
}
middleware({
}, {
json(data) {
console.log('GOT JSON', data);
}
} );
+14
-10

@@ -9,2 +9,12 @@ 'use strict';

};
let promiseProps = Promise.props || function propsImpl(obj) {
let promisesToResolve = [];
Object.keys(obj).map(key => {
let promise = Promise.resolve(obj[key]).then(val => {
obj[key] = val;
});
promisesToResolve.push(promise)
});
return Promise.all(promisesToResolve).then(() => obj);
};

@@ -16,13 +26,7 @@ return Promise.resolveDeep = function resolveNestedPromises(obj) {

}
else if(obj && typeof obj === 'object' ) {
let promisesToResolve = [];
Object.keys(obj).map(key => {
let promise = resolveNestedPromises(obj[key]).then(val => {
obj[key] = val;
});
promisesToResolve.push(promise)
});
if(promisesToResolve.length) {
return Promise.all(promisesToResolve).then(() => obj);
else if(obj && typeof obj === 'object' && obj.constructor === Object) {
for(var key in obj) {
obj[key] = resolveNestedPromises(obj[key]);
}
return promiseProps(obj);
}

@@ -29,0 +33,0 @@ return obj;

{
"name": "promise-resolve-deep",
"version": "1.0.1",
"version": "1.0.2",
"description": "Resolve a promise or value and all of its embedded promises (key values, elements of array, including nested)",

@@ -19,10 +19,12 @@ "main": "index.js",

"devDependencies": {
"benchmark": "^2.1.0",
"bluebird": "^3.3.3",
"chai": "^3.5.0",
"mocha": "^2.4.5",
"bluebird": "^3.3.3"
"microtime": "^2.1.0",
"mocha": "^2.4.5"
},
"repository" : {
"type" : "git"
, "url" : "https://github.com/virtkick/promise-resolve-deep.git"
"repository": {
"type": "git",
"url": "https://github.com/virtkick/promise-resolve-deep.git"
}
}

@@ -12,3 +12,3 @@ ## promise-resolve-deep

It can more or less be used like `Proimse.resolve` but will recursively/deep travel and resolve all nested promises.
Use it like `Proimse.resolve` and it will recursively/deep travel and resolve all nested promises in arrays and objects. Also any object or an array that any promise resolves to, will be deeply resolved too.

@@ -34,4 +34,34 @@ ```js

# License
## Fun with APIs
```js
// app is express application
// User and Book are bookshelf.js models
// needs: require('promise-resolve-deep')(Promise); to install the .resolveDeep method
app.get('/resources', wrap(() => {
return {
users: User.fetchAll().then(users => users.map(user => user.attributes)),
books: Book.fetchAll().then(books => books.map(book => book.attributes))
};
}));
// utilizing Promise.resolveDeep
function wrap(func) {
return (req, res) => {
Promise.resolve().then(() => func())
.then(Promise.resolveDeep).then(data => {
res.json(data);
}).catch(err => res.status(500));
}
}
```
If you want to write such declarative Promise-based APIs then you may also like this: https://github.com/virtkick/express-router-api
## Author
Damian Kaczmarek <rush@virtkick.com>
## License
MIT
'use strict';
require('chai');
let setupResolveDeep = require('./');
let setupResolveDeep = require('./index');
let assert = require('chai').assert;

@@ -6,0 +6,0 @@ let PromiseBluebird = require('bluebird');