简体   繁体   English

带有嵌套的Promises数组的对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM