[英]Object with nested arrays of Promises
I have an object with nested arrays of promises. 我有一个带有诺言嵌套数组的对象。
let promise = new Promise(resolve => setTimeout(resolve, 1000, 'url'));
let object = {
registration: [promise, promise, promise],
contract: [promise, promise, promise],
businessLicense: [promise, promise, promise],
businessPlan: [promise, promise, promise]
};
I need a function that would give the following result using Promise.all
我需要一个使用
Promise.all
可以给出以下结果的Promise.all
resolvePromisesFunction(object).then(result => console.log(result))
// the output should be
{
registration: [ 'url', 'url', 'url' ],
contract: [ 'url', 'url', 'url' ],
businessLicense: [ 'url', 'url', 'url' ],
businessPlan: [ 'url', 'url', 'url' ]
}
Thx! 谢谢!
You can use chaining promises along with Promise.all: 您可以将Promise.all与chaining promises一起使用:
let promise = new Promise(resolve => setTimeout(resolve, 1000, 'url')); var obj = { registration: [promise, promise, promise], contract: [promise, promise, promise], businessLicense: [promise, promise, promise], businessPlan: [promise, promise, promise] }; function resolvePromisesFunction(obj) { let resolvedObj = {}; return Promise.all(Object.keys(obj).map(service => { return Promise.all(obj[service]) .then(result => resolvedObj[service] = result); })).then(result => resolvedObj); } resolvePromisesFunction(obj).then(result => console.log(result));
Try iterating over your known promises, Promise.all
ing them, and then Promise.all
that result. 尝试迭代您的已知诺言,
Promise.all
它们,然后Promise.all
结果。
let promise = new Promise(resolve => setTimeout(resolve, 1000, 'url')); let object = { registration: [promise, promise, promise], contract: [promise, promise, promise], businessLicense: [promise, promise, promise], businessPlan: [promise, promise, promise] }; const promises = []; Object.keys(object).forEach(key => { promises.push(Promise.all(object[key])); }); Promise.all(promises).then(result => { const returnedObject = {}; result.forEach((value, index) => { returnedObject[Object.keys(object)[index]] = value; }); console.log(returnedObject); });
Here is a method that resolve deep nested object recursive. 这是一种解决深层嵌套对象递归的方法。 looking for all promise no mather how deep your object or array is
寻找所有的东西不会保证你的对象或数组有多深
// Resolves array const promiseMap = (promiseList, functor) => Promise.all(promiseList.map(promiseOrValue => Promise.resolve(promiseOrValue).then(functor) )) // Resolves objects const promiseProps = obj => Promise.all(Object.keys(obj).map(key => Promise.resolve(obj[key]).then(val => { obj[key] = val; }) )).then(() => obj) // Resolves recrusive deep objects const resolveNestedPromises = obj => Promise.resolve(obj).then(obj => { if (Array.isArray(obj)) { return promiseMap(obj, obj => resolveNestedPromises(obj)); } else if (obj && typeof obj === 'object' && obj.constructor === Object) { const obj2 = {}; for(const key in obj) { obj2[key] = resolveNestedPromises(obj[key]); } return promiseProps(obj2); } return obj; }) let promise = new Promise(resolve => setTimeout(resolve, 1000, 'url')); let object = { registration: [promise, promise, promise], contract: [promise, promise, promise], businessLicense: [promise, promise, promise], businessPlan: [promise, promise, promise] }; promiseProps(object).then(console.log) // or resolveNestedPromises(object).then(console.log)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.