代码之家  ›  专栏  ›  技术社区  ›  jublikon

角度滤波器不过滤元件

  •  0
  • jublikon  · 技术社区  · 6 年前

    我使用一个filter函数来过滤数组中的对象。 问题 :元素保持在数组中,即使它们不应该!为什么这些对象保留在数组中,尽管我使用的是过滤器?

    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 回复  |  直到 6 年前
        1
  •  0
  •   gatsbyz    6 年前

    try catch在这里没有意义 .filter 函数总是成功的。试着用下面的替换!:

    function filterPspDeliveries(pspDeliveryList: PspDelivery[]) {
        return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList && pspDelivery.packageList.length > 0);
    }
    
        2
  •  0
  •   Arthur Silva    6 年前

    here :

    等待接线员是用来等待承诺的。只能使用 在异步函数中。

    问题是,您正在等待一个不返回承诺的函数。相反,你的功能 async filterPspDeliveries 正在返回一个pspDelivery数组。

    而且,你不需要 async 关键字在 filterPspDeliveries 方法,因为您没有等待任何东西。

    解决办法是:

    解决方案1

    移除 await 关键字:

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

    解决方案2

    保持 等待 关键字,但返回承诺 过滤器过滤器 :

      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;
        }
    

    你可以用两种方法检查 here .

        3
  •  -2
  •   Reza    6 年前

    换成这个怎么样:

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