簡體   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