Обещания и foreach - PullRequest
       9

Обещания и foreach

0 голосов
/ 01 декабря 2018

Я хочу получить заказы после завершения всех нажатий в массив PrevOrders.Я пробовал разные техники.когда я утешаю результат, массив печатается, но я не могу получить его размер или даже манипулировать им.Как я могу получить результат?

this.PrevOrders=[];
orderList.forEach(order=>{ 
  let orderObject= order.payload.toJSON();
  if(orderObject&&orderObject['status']=="Order Delivered"){
  let orderItems= 
    this.afdb.object(`/OrderItems/${order.key}`);
  orderItems.snapshotChanges().subscribe(items=>{
    let itemsO=items.payload.toJSON();
    let OrderProducts=[]; 
    if(itemsO){ 
      for (const key in itemsO) {
        if (itemsO.hasOwnProperty(key))
         {                
          this.afdb.database.ref(`/Items/${key}`)
          .child('type').once('value')
          .then(item=>{
            if(OrderProducts.indexOf(item.toJSON())==-1)
                OrderProducts.push(item.toJSON());
           });
         }
     }
    this.length=this.PrevOrders.push(OrderProducts);
    }
  });
 }
});
Promise.resolve(orderList).then(()=>{
  console.log(this.length);
  console.log(this.PrevOrders);
});

1 Ответ

0 голосов
/ 01 декабря 2018

Вы добавляете элементы массива OrderProducts в асинхронном контексте, эта ваша фраза является ключевой: " после завершения всех нажатий в массив PrevOrders".

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

Promise.all(myArrayOfPromises).then(
 () => { /* access your data */ }
)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...