仅将.map()方法用于副作用是否合法?



使用高阶函数(如Array.map())执行一些副作用的循环是否合法(或良好做法)?

这主要是一个理论问题,因为我注意到有时我使用.map()方法发现(或自己执行)一些循环,如下所示:

let myObject = {...}
let myItemsArray = [ ... , ... ]
myItemsArray.map( (item, index) => {
// do some side effect for ex: 
myObject.item[index] = item
}

但我知道这个map()方法实际上返回一个数组。所以调用myItemsArray.map()就像我返回一个数组而不将其分配给任何变量一样。

那么问题来了,这合法吗?我应该避免这种情况并使用经典的for()循环还是.forEach()方法?

附带问题:我问这个问题的原因之一是因为我需要在异步函数上执行一些循环,因此涉及承诺和等待运算符,我记得forEach()循环在异步函数上并不理想,但想知道为什么。

那么问题来了,这合法吗?我应该避免这种情况并使用经典的 for() 循环还是 .forEach() 方法?

如果未从 map 函数返回任何内容,则应改用forEach。你最终会得到相同的结果,但你并不意味着,对于任何维护你的代码的人来说,你正在返回一些有用的东西。

问这个问题的原因之一是因为我需要在异步函数上执行一些循环,因此涉及承诺和等待运算符,我记得 forEach() 循环在异步函数上并不理想,但想知道为什么。

forEachmap都不会await你传递给它的函数是否返回一个承诺(async函数都会返回)。

因此,这里有三种可能的情况:

// Your loop
...myItemsArray...
// Code that comes after the loop
...etc...

A:循环中的项需要按顺序处理

使用常规for ()循环,因为外部函数不会暂停。

B:循环中的项可以并行处理,后面的代码不需要等待

使用forEach.

C:后面的代码需要等待循环中的所有内容完成

使用map.将返回的承诺数组传递给Promise.all。然后await

最新更新