2016-10-04 3 views
2

:공동의 차이와 기다리고 난 정말이 코드의 차이 이해하고 있지 않다

co(function *() { 
    const val = yield aPromise(); 
    return val; 
}) 
.then((val) => doSomethingWith(val), (err) => doSomethingWith(err)); 

이 다른 하나

async function() { 
    try { 
     const val = await aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

무엇 성능면에서 장점/단점은 (이다 , 가독성 및 흐름 제어가 주로 사용됨) 및 브라우저에서 사용되는 각 코드 (node.js)와 왜 공동 (co external library에 따라 다름) 또는 대기해야하는지 (아직 ES7에 속하지 않고 babel-polyfill에 따라 다름)를 사용해야합니다. 예제 코드에 대한

+0

비교가 의미가 없기 때문에이 질문을 주제와 관련이 없도록 닫으려고합니다. – Amit

+0

두 경우 모두 잔인합니다. :). 'aPromise(). then()'이면 충분합니다. :) –

+0

@ 왜 그것이 이해가되지 않겠습니까? 좀 더 잘 이해할 수 있도록 설명해 주시겠습니까? 주요 문제는 내가 왜 그것이 이해가 안되는지 알 수 없다는 것입니다 ... – David

답변

3

두 가지 주요 차이점이 표시했습니다

지금, 나는 당신이 실제로

var example = co.wrap(function *() { 
    try { 
     const val = yield aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

async function example() { 
    try { 
     const val = await aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

가능성이

function example() { 
    return aPromise().then(doSomethingWith).catch(doSomethingWith); 
} 

(마지막 하나는 실제로있는 다른 동작을 비교하기 위해 원하는 것을 생각 aPromise이 동 기적으로 throw되는 경우 whi

그래서

성능

중요하지 않음을 논의 할 수 있습니다)하지 않을해야 물론 그것을 ch가. 진짜로. 세 번째 엔진은 약속의 양이 가장 적기 때문에 가장 빠를 수 있지만 다른 두 개 엔진은 엔진에서 아직 최적화되지 않았습니다.

가독성

자신을 선택합니다. 첫 번째 두 개는 꽤 비슷합니다. 비록 co이 약간 못 생깁니다 (생성기 구문을 남용합니다). 세 번째는 매우 간결하며 그로 인해 선호 될 수 있습니다. 복잡한 제어 흐름이있는 모든 경우에이 이점이 빠르게 사라지더라도.

장점/단점의 문제가 아니다 흐름 제어

, 당신이 원하는 일 수있다.

왜 공동 사용해야합니까?

co는 더 이상 사용할 수 없습니다, 그것은 표준 ES8 (ES2017) async/await로 대체 (아직 게시되지 않은,하지만 여전히)입니다. 그것은 transpiler target (ES6는 지원하지만 ES8은 지원하지 않는 환경)이나 약속보다 다른 용도로 사용되었을 때 역 호환성을 위해 계속 사용될 수 있습니다 (co는 더 많은 유형의 "yieldable"을 지원합니다).