В первом примере вам не нужно отмечать getList
как async
(вы не используете await
на верхнем уровне). Суть проблемы в том, что setTimeout
- это неблокирующая операция, поэтому ваше Обещание разрешается до того, как массив сможет заполниться.
Во втором примере вы используете await
, но для неприемлемого элемента (numbers
- это просто массив), поэтому применима та же проблема, что и выше (обещание будет разрешено до того, как массив получит заполнено).
Если в вашем приложении "реального мира" у вас есть пример, когда вам нужно ждать определенный период времени, и это должно происходить в последовательном порядке, тогда вы можете создать ожидаемый setTimeout
например,
const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));
async function getList() {
const numbers = [1,2,3,4,5,6,7,8,9,10];
const out = [];
for (const n in numbers) {
await sleep(50);
out.push(n);
}
return out;
}