Чтобы объяснить, почему это происходит, позвольте мне привести еще один пример:
let values = inputs.map(async (input) => {
await input.getAttribute('value');
console.log('After await');
});
Без асинхронности c Подождите, это становится:
let values = inputs.map((input) => {
return input.getAttribute('value').then((result) => {
console.log('After await');
});
});
В этом случае вы ожидаете Эти значения - это список обещаний, которым он является.
Проблема, с которой вы столкнулись, - да, вы ожидаете результата. Однако функция asyn c ВСЕГДА возвращает обещание. map
не делает ничего, чтобы выполнить это обещание. await
внутри функции, переданной в map, на самом деле ничего не делает в этом случае. Вместо этого вам нужно сделать следующее:
const value_promises = inputs.map((input) => {
return input.getAttribute('value');
});
const values = await Promise.all(value_promises);
Promise.all
предназначен именно для этого случая, когда у вас есть список Обещаний и вы хотите получить их значения.