이 jestJS 단위 테스트를 실행하려고하는데, TypeError: Promise resolver undefined is not a function
을 얻습니다. 내가 도대체 뭘 잘못하고있는 겁니까?JS : Promise resolver가 함수가 아닙니다.
답변
new Promise()
은 실행 프로그램 기능 *없이 약속을 만들려고합니다.
var p = new Promise((resolve, reject) => {
// ...code that does something, ultimately calls either resolve or reject
});
외 :
올바른 사용법은 두 가지 매개 변수 (resolve
및
reject
), 예를 들어 최대 허용 함수에 전달하는
나중에 promise 인스턴스에 resolve
을 호출하려고 시도하는 것 같습니다. 표준 약속을 사용하지 않는 한 그렇게 할 수 없습니다. 실행 프로그램에 전달 된 resolve
기능을 사용하여 약속을 해결합니다. (나는 당신을 위해 코드를 수정하려고했으나 너무 많은 문맥 정보가 필요합니다.)
내가 V8의 오류 메시지가 "해결 기능"라고보고 놀랐어요하지만 난 그게 않습니다 확인한 *. The spec은 그것을 executor라고 부르며, "resolver functioN"이 Promise
생성자가 첫 번째 인수로 전달하는 함수라고 생각했을 것입니다 ...
그러나 나는'resolve(). then()'을 Promise로 가져 오는 방법을 모르겠다. – user3142695
@ user3142695 : 나는 당신의 코드를 따르지 않을까 두렵다. 종종, 모든 조치는 약속 집행자의 내부에서 이루어 지지만, 귀하의 경우에는 화살표 기능으로 싸여 있습니다. 당신의 프로젝트에 대해 더 많이 알지 못해서 나는 그 코드를 어떻게 업데이트하는지 정말로 설명 할 수 없다. 하지만 일반적으로 약속을 사용하는 방법에 대한 자세한 내용은 링크 된 기사 (두 번째 추가)를 참조하십시오. –
해결하려는 약속을 작성한 다음 Promise.resolve()
을 사용하면 이미 해결 된 새로운 약속이 반환됩니다.
new Promise()
은 약속되지 않은 (대개 비동기식) 코드를 약속으로 변환하는 데 사용되지만 여기에는 필요하지 않은 것처럼 보입니다. 당신이 그것을 사용하려고한다면, 당신은 그것에 함수를 전달해야 할 것입니다 (Felix Kling과 TJ Crowder가 이미 언급했듯이).
좀 더 포인트 :
- 당신은 그렇게 몇 줄 나중에 당신이 그것을 사용하는 경우, 함수로
createUserMutation
을 정의, 당신은()
를 사용 전화해야합니다. 또는 당신이 여기에서하려고하는 것은 약속을 생산하는 것으로 보이기 때문에 그것이 기능이 아닐 수도 있습니다. - 또한 Felix Kling이 지적한대로 약속에는
resolve()
메서드가 없습니다.Promise.resolve()
에 의해 제작 된 약속에.then()
으로 전화하면됩니다.
FWIW, 첫 번째 글 머리 기호, 나는 그것이 올바른 것 같습니다 : She/He는 그 결과가 아닌
Promise 생성자는 함수를 필요로합니다. 약속 인스턴스에는'resolve' 메소드가 없습니다. –
이 테스트가 어떻게 작동하는지 알아 내려고 애 쓰고 있습니다. 이 코드로 이어지는 사고 과정과 약속을 사용하려고 시도하는 것을 통해 우리를 걸을 수 있습니까? – JLRishe
왜 여기서 약속을 사용하고 있습니까? 비동기 코드의 부분은 무엇입니까? – Bergi