코드가 말하도록하십시오. 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와 함께 모카를 사용하는 것이 좋습니다.
왜 테스트 스위트를 실행하지 않습니까? –
코드를 훑어 보면 적어도 2 개의 버그가 있습니다 :'.then()'는'this'를 반환합니다 (이것은 실제로 버그 일뿐만 아니라 약속의 모든 부분을 놓칩니다). 그리고 여러분은 try catch를 가지고 있지 않습니다 'x.then' 주위에. https://github.com/promises-aplus/promises-tests에서 테스트 슈트를 실행하십시오. – Esailija
필자는 테스트 스위트를 사용하여 구현을 테스트하기 위해 수 시간 동안 노력했지만 필자는 방법을 다시 작성했지만 아무리 많은 방법을 사용해도 객체에 대한 많은 테스트가 실패합니다. 이것은 새로운 코드입니다 : https://gist.github.com/ilmattodel93/dbefa9eb86715f76e10e/082cd93623e061727df728a9993e4f24caf24597 많은 테스트를 여전히 실패하고 있습니다 :/왜? 사양이 말하는대로 코드를 구현했습니다 ... 생각합니다. :/ –