Как да разрешите вложени масиви с обещания

Имам масив от масиви от обещания, които бих искал да запазя вложени, защото те са начални и крайни координати на местоположението, така че двата набора от координати трябва да останат заедно във вътрешните масиви.

Опитвам се да разреша обещанията, но изглежда не мога да го накарам да работи. Опитвам се да картографирам външния масив, за да изпълня Promise.all върху вътрешните масиви, но не ми дава желания резултат.

Ето моят код:

const promises = idArr.map(route => route.map(id => (this.get(`places/${id}`))));
const places = promises.map(async route => (
    await Promise.all(route)
));

Където promises е:

[
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ],
  [ Promise { <pending> }, Promise { <pending> } ]
]

Този код дава резултата:

[
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> }
]

Опитах различни комбинации от картографирани Promise.all, но според мен това трябва да е начинът да го накарам да работи, но очевидно пропускам нещо.


person FRMR    schedule 22.09.2020    source източник
comment
Promise.all(places) е обещание, което ще бъде разрешено, когато всички вътрешни са.   -  person raina77ow    schedule 22.09.2020


Отговори (2)


Липсва ви едно ниво на влагане с Promise.all:

Опитайте тази:

Promise.all(promises.map(x => Promise.all(x)).then(console.log);
person Guerric P    schedule 22.09.2020

Ако вече имате обещания в масив, трябва просто да направите това

const promises = idArr.map(route => route.map(id => (this.get(`places/${id}`))));
Promice.all(promises).then(result=> console.log(result))
person Eugen Sunic    schedule 22.09.2020