2017-12-22 2 views
3

저는 Promises를 오랫동안 사용하고 있으며 항상 프로그램의 워크 플로를 제어하는 ​​데 사용하는 "물건"입니다. 예 :약속 대신 대기를 사용하는 올바른 방법은 무엇입니까?

Promise 
    .resolve(obj) 
    .then(doSomething1) 
    .then(doSomething2) 
    .catch(handleError) 

그리고 지금, 나는 시도 - 캐치 스타일을 변경하려면,하지만 올바른 방법이 될 것입니다 정확히 알 수 없습니다.

V1 :

try { 
    var body = await Promise 
       .resolve(obj) 
       .then(doSomething1) 
       .then(doSomething2) 
} catch (error) { 
    callback(error) 
} 
callback(null, { 
    statusCode: 200, 
    body 
}) 

V2 :

try { 
    var body = await Promise 
       .resolve(obj) 
       .then(doSomething1) 
       .then(doSomething2) 
       .then(body => { 
       callback(null, { 
        statusCode: 200, 
        body 
       }) 
       }) 
} catch (error) { 
    callback(error) 
} 

무엇이 올바른 접근 것입니까?

+0

합니다. 그것은 가장 유지 보수가 가능한 것에 달려 있습니다. –

+0

의견 유형에 근거한 질문의 종류는 같지만 V1을 더 좋아합니다. '.then'과'catch' 블록에서 하나가 아닌'callback' 호출을 서로 가깝게하는 것이 더 좋습니다. 하지만 내가 가장 좋아하는 미리보기는 실제로 약속을 사용하는 첫 번째 스 니펫입니다. – CRice

+0

왜 처음부터 '시도'로 변경하고 싶은지 모르겠다. – Ryan

답변

5

async/await으로 전환하기 위해 콜백 기능을 사용할 필요가 없습니다. async 함수는 단지 Promise를 반환하는 함수이며 편의상 await이 있습니다. 그래서 원래 기능의 상당 단순히 :

async function fn() { 
    try { 
    const obj = ...; 
    const result1 = await doSomething1(obj); 
    const result2 = await doSomething2(result1); 
    return result2; 
    } catch (err) { 
    return handleError(err); 
    } 
} 

해당 콜백 원하는 경우 :이 경우에 올바른 접근 방식이 있다고 생각하지 않습니다

async function fn(callback) { 
    try { 
    const obj = ...; 
    const result1 = await doSomething1(obj); 
    const result2 = await doSomething2(result1); 
    callback(null, result2); 
    } catch (err) { 
    callback(err); 
    } 
} 
+1

첫 번째 스 니펫에서 doSomething2() 호출을'대기 '하기 위해 [잊지 말 것] (https://stackoverflow.com/a/43985067/1048572) – Bergi

+0

모든 반환 값은'Promise.resolve'로 싸여 있습니다. Promise를 반환한다는 것은 약속 한 것을 기다리고 결과를 반환하는 것과 동일하므로 최종 약속을 반환하는 편리한 바로 가기입니다. – Jacob

+1

여기에는 같은 것이 없습니다. 링크 된 게시물을 읽어보십시오. – Bergi

관련 문제