ES5 array methods don't fully support async and generator functions, that's one of the reasons why for and other loop statements should be preferred to forEach in ES6.
In this case map is partially misused, because it doesn't manage array values. If promises should be resolved in parallel, it likely should be:
items = await Promise.all(items.map(async item => {
doSomething(item);
const result = await doSomethingAsync(item);
doSomethingMore(result, item);
return item;
});
Not much simpler but possibly semantically correct. If do.. functions modify item to the point its type changes, const newItems = await Promise.all(...) also makes it easier to manage item types.
If they should be resolved in series and no Promise.all has to be involved, this can be for..of:
for (const item of items) {
doSomething(item);
const result = await doSomethingAsync(item);
doSomethingMore(result, item);
});
Promise.all.mapmapto create the array of promises?