我正在尝试使用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
数组。
有什么建议我做错了吗?
谢谢。
答案 0 :(得分:3)
filter
期望回调的返回值是一个布尔值,但是async
函数总是返回一个Promise。
您不知道是否要及时返回true
或false
来告知filter
是什么。
您可能想做的是:
map
中的数据从data
到{ 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);