2014-04-24 3 views
1

현재 사양 (내가 사용한이 http://promises-aplus.github.io/promises-spec/)과 일치하는 Typescript 약속 구현 (실제로는 polyfill)을 만들려고합니다.약속 이행이 사양에 동의합니까?

코드는 여기에 https://gist.github.com/ilmattodel93/dbefa9eb86715f76e10e이되어야하지만 스펙의 2.2.7 하위 포인트를 이해할 수는 없습니다. 경주와 모든 정적 방법 만 빠져 있어야합니다.

누군가 나를 2.2.7 하위 지점을 설명하고 올바르게 구현했는지 말해 줄 수 있습니까?

주의 및 시간에 감사드립니다. Mattia.

+0

왜 테스트 스위트를 실행하지 않습니까? –

+2

코드를 훑어 보면 적어도 2 개의 버그가 있습니다 :'.then()'는'this'를 반환합니다 (이것은 실제로 버그 일뿐만 아니라 약속의 모든 부분을 놓칩니다). 그리고 여러분은 try catch를 가지고 있지 않습니다 'x.then' 주위에. https://github.com/promises-aplus/promises-tests에서 테스트 슈트를 실행하십시오. – Esailija

+0

필자는 테스트 스위트를 사용하여 구현을 테스트하기 위해 수 시간 동안 노력했지만 필자는 방법을 다시 작성했지만 아무리 많은 방법을 사용해도 객체에 대한 많은 테스트가 실패합니다. 이것은 새로운 코드입니다 : https://gist.github.com/ilmattodel93/dbefa9eb86715f76e10e/082cd93623e061727df728a9993e4f24caf24597 많은 테스트를 여전히 실패하고 있습니다 :/왜? 사양이 말하는대로 코드를 구현했습니다 ... 생각합니다. :/ –

답변

2

코드가 말하도록하십시오. promise1이라는 약속이 있다고 가정 해 보겠습니다. 사양에 따르면

사양에서

promise2 = promise1.then(onFulfilled, onRejected); 

:

은 사양에서

다음 약속을

자기 explainatory을 반환해야

onFulfilled 또는 onRejected가 x 값을 반환하는 경우 Promise Resolution 프로 시저 [[Resolve]] (promise2, x)를 실행하십시오.

우리가 하나가 onFulfilled 경우

promise2 = promise1.then(()=>123,()=>123); 

는 그런 다음 사양

에서

promise2.then((x)=> /* x should be 123 */, (x)=> /* will not be called */); 

을 할 수 있거나 onRejected 예외 전자를 발생하는 경우, promise2이어야합니다 이유가 e로 거부되었습니다.

우리가 그런

promise2 = promise1.then(()=> { throw new Error('message'); },()=> { throw new Error('message'); }); 

이있는 경우는 사양에서

promise2.then((x)=> /* should not be called */, (x)=> /* x will be equal to "new Error('message')" */); 

onFulfilled가 아닌 기능과 promise1이 충족되는 경우

, promise2 수행해야 할 수 동일한 가치로 성취 될 수있다.

우리는 onRejected가, promise2 수행해야하는 기능하지 않고 promise1이 거부되면

promise1 = new Promise(function(resolve,reject) { resolve(123) }); 
promise2 = promise1.then(null,null); 

그런 다음 우리가 사양

에서

promise2.then((x)=> /* x should be 123 */, (x)=> /* should not be called */); 

을 할 수있는 경우 같은 이유로 거절 당한다. 우리가

promise1 = new Promise(function(resolve,reject) { reject(123) }); 
promise2 = promise1.then(null,null); 

이있는 경우

그럼 우리가

promise2.then((x)=> /* should not be called */, (x)=> /* x should be 123 */); 

는 구현 쓰기 테스트하는 그림과 같이 확인하려면 할 수 있습니다. Chai와 함께 모카를 사용하는 것이 좋습니다.

+0

이것을 구현 한 후에도 테스트를 통과하지 마십시오. / –

0

또한 TypeScript 정의가 사양의 A/정의와 호환되도록 확인할 수 있습니다. spec의 약속을위한 TypeScript 코드는 DefinitelyTyped on GitHub입니다.

관련 문제