function handle(promise){
    return promise.then(data=>[null,data]).catch(err=>[err,null])
}

function fn1(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('fn1');
            resolve('ffn1');
        },1000)
    })
}

function fn2(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('fn2');
            resolve('ffn2');
        },1000)
    })
}

function rejectFn(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('rejectFn');
            reject('rejectFn');
        },1000)
    })
}

async function test1(){
    let time1 = new Date().getTime();
    let f1 = fn1();
    let f2 = fn2();
    let res1 = await f1;
    let res2 = await f2;
    console.log(res1,res2);
    let time2 = new Date().getTime();
    console.log(time2-time1);
}

// test1(); // 1012ms


async function test2(){
    let time1 = new Date().getTime();
    let res1 = await fn1();
    let res2 = await fn2();
    console.log(res1,res2);
    let time2 = new Date().getTime();
    console.log(time2-time1);
}

// test2(); // 2021ms

async function test3(){
    let time1 = new Date().getTime();
    let f1 = fn1();
    let f2 = fn2();
    let r3 = rejectFn();
    let [err,res] = await handle(f1);
    let [err2,res2] = await handle(f2);
    let [err3,res3] = await handle(r3);
    console.log(err,res);
    console.log(err2,res2);
    console.log(err3,res3);
    let time2 = new Date().getTime();
    console.log(time2-time1);
}

test3(); // 1023ms