Crea dos archivos en la misma carpeta, index.js y tasks.js

//index.js
//obtenemos los metodos desde tasks.js
const { taskOne, taskTwo } = require('./tasks.js');

//creamos una funcion asincrona con gestion de errores
async function main(){
    try{
				//este es codigo sequencial 
				//porque no pasa a la siguiente linea si no termina el anterior
        console.time('Measuring time');//medimos el tiempo que tardan las dos funciones
        const valueOne = await taskOne();//asignamos las funciones a const
        const valueTwo = await taskTwo();
        console.timeEnd('Measuring time');

        console.log('Task One returned ', valueOne);
        console.log('Task Two returned ', valueTwo);
    }
    catch(e){//mostramos errores si los hay
        console.log(e)
    }
    
}
main()//llamamos a la funcion asincrona
//tasks.js
//util nos permite usar como funcion asincrona cosas que funcionan como promesas 
const util = require ('util');
//usamos util para usar setTimeout lo podamos usar como funcion asincrona
const sleep = util.promisify(setTimeout);

//module.exports envia una funcion u objeto
//vamos a simular tareas que podrĂ­an ser tareas asincronas
module.exports = {
    async taskOne() {//metodo enviado
        try{
            throw new Error('Something wrong');// insertamos un error fictisio
            await sleep(4000) //setTimeout de 4 seg
            return 'ONE VALUE' //valor que arroja cuando se cumple
        }
        catch(e){
            console.log(e)
        }
    },
    async taskTwo() {//otro metodo enviado
        try{
            await sleep(2000)
            return 'TWO VALUE'
        }
        catch(e){
            console.log(e)
        }
        
    }

}
//Para correr esto con node escribimos en termial 
node index.js
//se terminaria en 6 seg aprox