[英]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
函數總是返回一個承諾。
您不知道是否要及時返回true
或false
以告訴filter
它是哪個。
你可能想要做的是:
data
map
到{ keep: true, original_data: data }
(使用async
回調)Promise.all
await
Promise.all
的返回值filter
該數組: .filter(data => data.keep)
.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.