request.post
- это функция, которая принимает параметры запроса и обратный вызов, подобный этому.
function request(letter, callback = () => {}) {
setTimeout(() => {
console.log(letter);
callback();
}, Math.random() * 1000);
}
То, что вы делаете, вызывает эту функцию без обратного вызова:
async function clientWithRequest() {
const letters = ['a', 'b', 'c'];
for(let i = 0; i < letters.length; i++) {
await request(letters[i]);
}
}
здесь все запросы выполняются одновременно и возвращаются в неопределенном порядке.
Что вам нужно сделать, если вы хотите использовать async, это сделать запрос верным обещанием. Под капотом await на самом деле просто делает request.then (что-то Else ()). Так что если вы измените свой запрос, чтобы вернуть обещание, как:
function requestPromise(letter) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(letter);
resolve();
}, Math.random() * 1000);
});
}
Ваш код ожидания будет работать, как и ожидалось. Эффективно это делает.
request('a').then(() => request('b')).then(() => request('c'));