[英]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.