Promise.all + array.map
Здравствуйте, у меня есть массив стран, мне нужно отфильтровать и запушить туда измененные фрагменты
так как надо сделать и filter и map использою reduce let countries = [{ iso: "ca", flag: "<svg></svg>" }, { iso: "us" }, { iso: "an" }] async function optimizeSVG(str) { return await str; } let result = Promise.all(countries.reduce(async (filtered, country) => { const countriesToIgnore = ['an'] if (!countriesToIgnore.includes(country.iso)) { flag = await optimizeSVG(country.flag) filtered.push(await [country.iso, flag || 'noflag']) } return await filtered }, [])) console.log(result) однако в результат возращается object promise а не массив |
Я не хрена не понял, зачем тут Pomise, async, await
НО Цитата:
Что вызвали, то и получили |
Сделал версию на array.map
let countries = [ { iso: "ca", flag: "<svg></svg>" }, { iso: "us" }, { iso: "an" } ]; async function optimizeSVG(str) { return str; } async function filterCountries() { const countriesToIgnore = ['an']; let result = await Promise.all(countries.map(async (country) => { if (!countriesToIgnore.includes(country.iso)) { let flag = await optimizeSVG(country.flag); return [country.iso, flag || 'noflag']; } })); result = result.filter(Boolean); console.log(result); } filterCountries(); но можно ли без result = result.filter(Boolean); |
Чего мучаться?
Сначала отфильтровать, потом оптимизировать let countries = [ { iso: "ca", flag: "<svg></svg>" }, { iso: "us" }, { iso: "an" } ]; async function optimizeSVG(str) { return str; } async function filterCountries() { const countriesToIgnore = ['an']; const filtered = countries.filter(country => !countriesToIgnore.includes(country.iso)) let result = await Promise.all(filtered.map(async (country) => { let flag = await optimizeSVG(country.flag); return [country.iso, flag || 'noflag']; })); console.log(result); } filterCountries(); |
Часовой пояс GMT +3, время: 19:56. |