2017-12-11 5 views
0

async/await를 이해하려고 할 때 예상했던대로 작동하지 않는이 코드 블록을 시도했습니다. 동일한 async 함수/타이머 재설정에서 여러 setTimeout 사용

let test = async function() { 
    let result = new Promise((resolve, reject) => { 
    setTimeout(() => resolve('done1'), 2000) 
    }) 

    let result2 = new Promise((resolve, reject) => { 

    setTimeout(() => resolve('done2'), 2500) 
    }) 

    let x1 = await result 
    console.log(x1) 


    let x2 = await result2 
    console.log(x2) 

} 

test() 

난 후, 이초 후 done1 표시 done1 후 2.5 초 done2 ​​표시하는 콘솔을 기다리고 있었다. 대신, 그것은 2 초 안에 done1을 표시하고 그 후 0.52 초를 표시합니다. 첫 번째를 표시 한 후 두 번째 setTimeout을 기다리고 있기 때문에 왜 이렇게 동작합니까?

+0

시작 = 약속 만들기. 약속이 만들어지기 전에'기다려야 '합니다. –

+0

@JonasW. * 두 번째 * 약속이 이루어지기 전에 약속 *을 기다리고 있습니다. – Bergi

답변

1

new Promise을 만들면 코드가 실행되기 시작합니다. 그 안에 setTimeout이 있으면 실제로 타이머가 진행됩니다. Promise 호출 전에 await을 사용하면 약속이 해결되거나 거부 될 때까지 기다린 다음 작업합니다.

각 약속을 작성한 다음 기다려야합니다.

let test = async function() { 
 

 
    let result = new Promise((resolve, reject) => { 
 
    setTimeout(() => resolve('done1'), 2000); 
 
    }); 
 
    
 
    let x1 = await result; 
 
    console.log(x1); 
 

 
    let result2 = new Promise((resolve, reject) => { 
 
    setTimeout(() => resolve('done2'), 2500); 
 
    }); 
 

 
    let x2 = await result2; 
 
    console.log(x2); 
 

 
} 
 

 
test()