Карта с двумя обещаниями возвращает два массива, но требуется только один

#javascript #arrays #promise

Вопрос:

Я пытаюсь что-то ускорить и сделать так, чтобы еда и напитки могли быть добавлены в заказ одновременно. Поэтому я даю обещание, которое разрешится, когда все будет сделано. Затем я помещаю оба этих условия в другое обещание, которое будет выполнено, когда все заказы будут выполнены.

 orders = [
  {'name': 'john'},
  {'name': 'sam'},
]

const p = orders.map((order)=>{
    return Promise.all([
        add_food(order),
        add_drink(order),
    ])
})
return Promise.all(p)

function add_food(order){
   retrun Promise.resolve(order)
}
 

То, что я получаю, — это массив с вещами, которые дублируются.

 [
  [ "order_1", "order_1"],
  [ "order_2", "order_2"]
]
 

Что на самом деле имеет смысл. Однако я нахожусь в тупике относительно того, как решить эту проблему и реструктурировать ее, чтобы вернуться

 [ "order_1", "order_1"]
 

Есть какие-нибудь идеи?

Ответ №1:

вам просто нужно добавить .then(_ => order) «после Promise.all «, чтобы вернуть заказ, когда обещания о еде и напитках будут выполнены :

 const p = orders.map(order => {
  return Promise.all([
    add_food(order),
    add_drink(order),
  ]).then(_ => order)
})

return Promise.all(p)