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, время: 17:09. |