Как сделать так, чтобы данный код синхронно выполнялся

как сделать данных код синхронным? Чтобы он все выводил по очереди? Сначала то, что внутри функции setTimeout, потом обычный console.log(value);, ну и тд.

const test = async () => {
        let qwe = [1000, 2000 ,3000];
        await _.each(qwe,  async (value) => {
            await setTimeout(() => {
                console.log(value)
            }, value);
            console.log(value);
        })
    
        console.log('1 part')
        
        await qwe.map(async (value) => {
            await setTimeout(() => {
                console.log(value)
            }, value);
            console.log(value);
        })
        
        await console.log('2 part')
    }
    
    test();

Ответы (1 шт):

Автор решения: Иван Поднебесный

Можно попробовать сделать так:

Array.prototype.asyncForEach = async function(callback)
    {
      let index = 0;
      for(let val of this){
        await callback(val, index++, this);
      }
    }
    
    const test =  async () => {
            let qwe = [3000, 1000 ,2000];
      
             await qwe.asyncForEach(async (val) => {
                const asyncSetTimeOut = () => new Promise(res => {
                  setTimeout(() => {
                    console.log("qwe: From timeout: ", val);
                    res(val)
                  }, val)
                });
                await asyncSetTimeOut();
                console.log("qwe: From asyncForEach: ", val);
            });
      
            let qwe2 = [1000, 3000, 2000]
             await qwe2.asyncForEach(async (val) => {
                const asyncSetTimeOut = () => new Promise(res => {
                  setTimeout(() => {
                    console.log("qwe2: From timeout: ", val);
                    res(val)
                  }, val)
                });
                await asyncSetTimeOut();
                console.log("qwe2: From asyncForEach: ", val);
            })
            
        
        
    }
        
    test();

→ Ссылка