2016-08-08 7 views
3

나는 Promise에서 비동기/기다리고 값을 반환하는 데 조금 어려움을 겪고 있습니다.async/wwait 약속 약속

console.log(c()) 

을하지만이 약속을 반환로 명확하게 여기 점을 놓치고 :

function test() { 
    return new Promise((resolve, reject) => { 
    resolve('Hello') 
    }) 
} 

async function c() { 
    await test() 
} 

내가 일을 알 수있는 바와 같이 나는 수행하여 값을 얻을 수 있어야합니다. "여보세요"를 인쇄해서는 안됩니까? 비슷한 메모에서 나는 비동기/대기 상태로 포장하기 전에 콜백을 약속으로 변환해야하는지 여부가 확실하지 않습니까?

+0

음, 아니요, async/await는 마술처럼 비동기 코드를 동 기적으로 실행하지 않습니다. async 함수 외부의 코드는 여전히 async 함수가 완료 될 때까지 기다려야합니다. –

답변

7

약속을 반환하므로 여기에 요점이 빠져 있습니다. 하지 말아야 console.log(c()) 인쇄 "안녕하세요"?

아니요, async 함수는 항상 약속을 반환합니다. 그들은 마술처럼 비동기 코드를 동 기적으로 실행하지 않습니다. 반대로, 비동기식으로 실행하는 동기식 코드 (await 키워드로 얼룩 져 있음)를 켭니다.

당신은 비동기 기능 내부의 결과 값 를 얻을 수 있습니다 :

async function c() { 
    const result = await test() 
    console.log(result); 
    return 'World'; 
} 
c().then(console.log); 

내가 비동기/await를 그것을 포장하기 전에 콜백이 약속으로 변환 할 필요가 있는지에 분명 무엇입니까?

예, await 만 약속 할 수 있습니다. 전환을 수행하는 방법은 How do I convert an existing callback API to promises?을 참조하십시오.

0

비동기 함수는 Promise를 반환합니다. 함수가 오류를 throw하면 약속이 거부됩니다. 함수가 값을 반환하면 Promise 이 해결됩니다.