在Array.filter中使用异步的正确方法

  介绍

本篇文章给大家分享的是有关在Array.filter中使用异步的正确方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强> 1。如何仅保留满足异步条件的元素

在第一篇文章中,我们介绍了异步/等待如何帮助处理异步事件,但在异步处理集合时却无济于事。在本文中,我们将研究该滤波器函数,它可能是支持异步函数的最直观的方法。

<强> 2。数组中。过滤器

该滤波器函数仅保留通过条件的元素。它得到一个断言(谓词)函数,并且此函数返回true/false值。结果集合仅包含断言(谓词)返回真正的元素。

 const arr=[1、2、3、4、5);
  
  const syncRes=arr.filter ((i)=比;{
  返回我% 2===0;
  });
  console.log (syncRes);//2、4 

<强> 3。过滤器结合地图使用

这次的异步版本要复杂一些,它分为两个阶段。第一个通过断言函数异步地映射数组,从而生成true/false值。然后第二步是利用第一步的结果同步过滤

在数组中。过滤器中使用异步的正确方法

const arr=[1、2、3、4、5);      谓词const asyncFilter=异步(arr)=比;{   const结果=等待Promise.all (arr.map(谓词));      加勒比海盗。过滤器((_v、索引)=比;结果(指数));   }      const asyncRes=等待asyncFilter (arr异步(i)=比;{   等待睡眠(10);   返回我% 2===0;   });      console.log (asyncRes);//2、4

或单行实现:

const asyncFilter=异步(arr谓词)=比;Promise.all (arr.map(谓词)
区间((结果)=比;加勒比海盗。过滤器((_v、索引)=比;结果(指数)));

在Array.filter中使用异步的正确方法

<强>并发

上面的实现同时运行所有断言函数。通常,这很好,但是与所有其他功能一样,它可能会使某些资源变得过分紧张。幸运的是,由于上述实现依赖于此地图,因此可以使用相同的并发控件。

<强> 4。过滤器结合减少使用

除了使用异步地图与同步之外过滤器,异步降低也可以完成这项工作,由于它只是一个功能,因此即使没有提供相同级别的控制,结构也更加容易。

首先,从一个空数组([])开始,然后通过断言函数运行下一个元素,如果通过则将其追加到数组。如果没有,请跳过它。

在数组中。过滤器中使用异步的正确方法

//并发   谓词const asyncFilter=异步(arr)=比;   加勒比海盗。减少(异步(备忘录,e)=比;   等待谓词(e)和# 63;[…等待备忘录,e):备忘录   []),

在数组中。过滤器中使用异步的正确方法

请注意,等待谓词(e)在等待备忘录之前,这意味着这些将并行调用。

<强>顺序处理

要在调用下一个谓词函数之前等待其结束,请更改等待的顺序:

//顺序   谓词const asyncFilter=异步(arr)=比;   加勒比海盗。减少(异步(备忘录,e)=比;   […等待备忘录,……等待谓词(e)和# 63;[e]: []]   []),

此实现等待上一个元素,然后根据断言(…[e]或…[])的结果有条件地附加一个元素。

在Array.filter中使用异步的正确方法

<强> 5。结论

虽然异步过滤器是可能的,但它最初的工作方式看起来很奇怪。尽管并发控制仍然可用,但与其他异步功能相比,它们需要更多的计划去控制它。

以上就是在Array.filter中使用异步的正确方法,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

在Array.filter中使用异步的正确方法