2017-11-11 8 views
1

이 jestJS 단위 테스트를 실행하려고하는데, TypeError: Promise resolver undefined is not a function을 얻습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?JS : Promise resolver가 함수가 아닙니다.

+2

Promise 생성자는 함수를 필요로합니다. 약속 인스턴스에는'resolve' 메소드가 없습니다. –

+1

이 테스트가 어떻게 작동하는지 알아 내려고 애 쓰고 있습니다. 이 코드로 이어지는 사고 과정과 약속을 사용하려고 시도하는 것을 통해 우리를 걸을 수 있습니까? – JLRishe

+0

왜 여기서 약속을 사용하고 있습니까? 비동기 코드의 부분은 무엇입니까? – Bergi

답변

2

new Promise()은 실행 프로그램 기능 *없이 약속을 만들려고합니다.

MDN에
var p = new Promise((resolve, reject) => { 
    // ...code that does something, ultimately calls either resolve or reject 
}); 

외 :

올바른 사용법은 두 가지 매개 변수 ( resolvereject), 예를 들어 최대 허용 함수에 전달하는

나중에 promise 인스턴스에 resolve을 호출하려고 시도하는 것 같습니다. 표준 약속을 사용하지 않는 한 그렇게 할 수 없습니다. 실행 프로그램에 전달 된 resolve 기능을 사용하여 약속을 해결합니다. (나는 당신을 위해 코드를 수정하려고했으나 너무 많은 문맥 정보가 필요합니다.)


내가 V8의 오류 메시지가 "해결 기능"라고보고 놀랐어요하지만 난 그게 않습니다 확인한 *. The spec은 그것을 executor라고 부르며, "resolver functioN"이 Promise 생성자가 첫 번째 인수로 전달하는 함수라고 생각했을 것입니다 ...

+0

그러나 나는'resolve(). then()'을 Promise로 가져 오는 방법을 모르겠다. – user3142695

+0

@ user3142695 : 나는 당신의 코드를 따르지 않을까 두렵다. 종종, 모든 조치는 약속 집행자의 내부에서 이루어 지지만, 귀하의 경우에는 화살표 기능으로 싸여 있습니다. 당신의 프로젝트에 대해 더 많이 알지 못해서 나는 그 코드를 어떻게 업데이트하는지 정말로 설명 할 수 없다. 하지만 일반적으로 약속을 사용하는 방법에 대한 자세한 내용은 링크 된 기사 (두 번째 추가)를 참조하십시오. –

1

해결하려는 약속을 작성한 다음 Promise.resolve()을 사용하면 이미 해결 된 새로운 약속이 반환됩니다.

new Promise()은 약속되지 않은 (대개 비동기식) 코드를 약속으로 변환하는 데 사용되지만 여기에는 필요하지 않은 것처럼 보입니다. 당신이 그것을 사용하려고한다면, 당신은 그것에 함수를 전달해야 할 것입니다 (Felix Kling과 TJ Crowder가 이미 언급했듯이).

좀 더 포인트 :

  • 당신은 그렇게 몇 줄 나중에 당신이 그것을 사용하는 경우, 함수로 createUserMutation을 정의, 당신은 ()를 사용 전화해야합니다. 또는 당신이 여기에서하려고하는 것은 약속을 생산하는 것으로 보이기 때문에 그것이 기능이 아닐 수도 있습니다.
  • 또한 Felix Kling이 지적한대로 약속에는 resolve() 메서드가 없습니다. Promise.resolve()에 의해 제작 된 약속에 .then()으로 전화하면됩니다.
+0

FWIW, 첫 번째 글 머리 기호, 나는 그것이 올바른 것 같습니다 : She/He는 그 결과가 아닌 의 소품으로 함수를 전달하고 있습니다 (아마도 사용자를 변형시킬 때 호출 할 수 있습니다). (그러나 분명히 우리는 어떤 방법 으로든 확실하게하기 위해 더 많은 컨텍스트가 필요할 것입니다.) –