当不使用async/await时,filter之后结果是对的,但是使用async/await之后结果就不正确了,比如
console.log([1, 2, 3, 4, 5].filter((i) => i % 2 == 0))
// [ 2, 4 ]
console.log([1, 2, 3, 4, 5].filter(async (i) => i % 2 == 0))
// [ 1, 2, 3, 4, 5 ]
那么在filter中怎么使用async/await?
这个有点类似在forEach中使用async/await,也可以用Promise.all(...)
和map
来实现,先把条件过滤的结果计算出来,然后在filter中使用。
const arr = [1, 2, 3, 4, 5]
const results = await Promise.all(arr.map(async (i) => i % 2 == 0))
console.log(arr.filter((_, i) => results[i]))
内容