繁体   English   中英

Array.filter() 带有异步箭头函数

[英]Array.filter() with async arrow function

我正在尝试使用Array.filter()函数过滤我的数组,但是我遇到了这个问题。 我需要异步调用filter函数中的其他一些函数。 但是,数组不会根据我在函数中定义的条件更改其值。

const filterWithEmail = data.filter(async (doc) =>
{
   const findUser = await UserService.findUser(doc.id).catch(err => {});
   if (findUser)
   {
      const { email } = findUser;
      return regexFilter ? regexFilter.test(email.normalize("NFKC")) : false;
   }
});

由于某种原因,此代码根本不影响data数组。 任何建议我做错了什么?

先感谢您。

filter期望回调的返回值是一个布尔值,但async函数总是返回一个承诺。

您不知道是否要及时返回truefalse以告诉filter它是哪个。

你可能想要做的是:

  1. 将数据从data map{ keep: true, original_data: data } (使用async回调)
  2. 将结果的 promise 数组传递给Promise.all
  3. await Promise.all的返回值
  4. filter该数组: .filter(data => data.keep)
  5. 使用.map(data => data.original_data)取回原始对象

沿着这些路线的东西(未经测试):

const filterWithEmail = (
  await Promise.all(
    data.map(async (data) => {
      const findUser = await UserService.findUser(doc.id).catch((err) => {});
      let keep = false;
      if (findUser && regexFilter)
        keep = regexFilter.test(email.normalize("NFKC"));
      return { data, keep };
    })
  )
)
  .filter((data) => data.keep)
  .map((data) => data.data);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM