Ионик: Как работает обещание? - PullRequest
0 голосов
/ 31 мая 2018

Я попытался изменить свой forEach на .reduce, чтобы использовать Promise.Мой код

getResolvedData(arrInsertedData){
        let arrData = [];
        let that = this;

        arrInsertedData.reduce((p, objInsertedData) => p.then(_ =>  {
            let arrDataLength = arrData.length;

            that.getNewData(objInsertedData).then(arrNewData => {
                arrData[arrDataLength] = arrNewData;
            })
        }), Promise.resolve().then(_ => function (arrData) {
            return Promise.resolve(arrData);
        }));
    }

Он всегда ничего не возвращает.Так как я могу сделать это правильно?

1 Ответ

0 голосов
/ 31 мая 2018

Это не сработает.Обещания обычно разрешаются асинхронно, поэтому ваша функция уже вернется к моменту заполнения arrData.Вам нужно обрабатывать данные в обратном вызове (или использовать async / await, но сначала вы должны прочитать об обещаниях).

Также не похоже, что вам нужно разрешать эти обещания по порядку.Если они могут быть разрешены параллельно, вам лучше использовать map и Promise.all:

getResolvedData(arrInsertedData){    
  Promise.all(
    arrInsertedData.map(objInsertedData => this.getNewData(objInsertedData));
  ).then(arrData => {
    // do something with arrData here
    console.log(arrData);
  });
}

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

https://scotch.io/tutorials/javascript-promises-for-dummies

Не обижайся на звание!

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