угловой фильтр не фильтрует элементы - PullRequest
0 голосов
/ 26 ноября 2018

Я использую функцию фильтра для фильтрации объектов из массива. Проблема : элементы остаются в массиве, даже если они не должны!Почему эти объекты хранятся в массиве, хотя я использую фильтр?

async filterPspDeliveries(pspDeliveryList: PspDelivery[]){
    try {
        return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList.length > 0);
    } catch(e) {
      console.log(e);
    }
}

фильтр используется в том же классе:

for (let psp of pspList){
    let tmpDeliveryList = await this.filterPspDeliveries(psp.deliveryList);
    psp.deliveryList = tmpDeliveryList;
}

Примечание : Я просто хочу отфильтровать доставки, которые не содержат списка пакетов.

Я ценю любую помощь.

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Try catch здесь не имеет значения, так как .filter функция всегда будет успешной.Попробуйте заменить на следующее:

function filterPspDeliveries(pspDeliveryList: PspDelivery[]) {
    return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList && pspDelivery.packageList.length > 0);
}
0 голосов
/ 26 ноября 2018

С здесь :

Оператор ожидания используется для ожидания обещания.Его можно использовать только внутри асинхронной функции.

Проблема в том, что вы ожидаете функцию, которая не возвращает обещание.Вместо этого ваша функция async filterPspDeliveries возвращает массив PspDelivery.

Кроме того, вам не нужно ключевое слово async для метода filterPspDeliveries, поскольку вы ничего не ожидаете.

Решение может быть либо:

Решение 1

Удалите ключевое слово await:

 for(let psp of pspList){
      let tmpDeliveryList =  this.filterPspDeliveries(psp.deliveryList);
      psp.deliveryList = tmpDeliveryList;
    }

Решение 2

Сохранить awaitключевое слово, но возвращая обещание в filterPspDeliveries:

  filterPspDeliveries(pspDeliveryList: PspDelivery[]): Promise<PspDelivery[]> {
    try {
      return new Promise(resolve => {
        let result = pspDeliveryList.filter((pspDelivery) => {
          return (pspDelivery.packageList.length > 0);
        })
        resolve(result);
        return;
      });
    } catch (e) {
      console.log(e);
    }
  }


for(let psp of pspList){
      let tmpDeliveryList = await this.filterPspDeliveries(psp.deliveryList);
      psp.deliveryList = tmpDeliveryList;
    }

Вы можете проверить его, работая с обоими решениями здесь .

0 голосов
/ 26 ноября 2018

Как насчет перехода на это:

async filterPspDeliveries(pspDeliveryList: PspDelivery[]){
    try{
      return pspDeliveryList.filter((pspDelivery) => pspDelivery.packageList && pspDelivery.packageList.length > 0);
    } catch(e) {
      console.log(e);
    }
  }
...