#javascript #arrays
#javascript #массивы
Вопрос:
как вернуть значение из асинхронной функции в array.map Я пытаюсь получить доступ к значению из них, но я получаю массив [[object Promise], [object Promise], [object Promise], [object Promise]]
?
Я хочу асинхронность внутри array1.map
, потому что у меня есть некоторый процесс, который требует времени, поэтому мне нужно использовать await.
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async ()=>{
const map1 = await array1.map(async x => 'hi');
return map1;
// expected output: Array [2, 8, 18, 32]
}
test().then((data)=>{
console.log(data)
})
ожидаемый результат: массив ['hi', 'hi', 'hi', 'hi']
мой вывод: [[object Promise], [object Promise], [object Promise], [object Promise]]
Ответ №1:
Вам нужно использовать Promise.all
функцию, куда вы помещаете свой массив обещаний
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map(async x => 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
ожидаемый результат: Array [‘привет’, ‘hi’, ‘hi’, ‘hi’]
Ответ №2:
Решение 1
Если вы поместите await внутри функции map более высокого порядка, вы получите ожидаемый результат
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map( async x =>await 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
Решение 2
Если вы удалите async из параметра функции более высокого порядка, вы получите ожидаемый результат.
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map( x => 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
Комментарии:
1. Спасибо, решение 1 работает в моем случае, потому что у меня есть некоторые асинхронные функции внутри array.map.
Ответ №3:
Вы можете использовать async.map из модуля async. функция async.map принимает три аргумента.
- Массив для перебора.
- Функция, которая должна выполняться для каждого элемента из массива.
- Обратный вызов, который будет выполнен после завершения всех итераций.