주어진 객체가 ES6 Promise인지 확인하기 위해이 술어를 사용할 수 있습니다.
function isPromise(p) {
return p && Object.prototype.toString.call(p) === "[object Promise]";
}
Call
toString
에서 직접을 보내면 주어진 객체 유형의 기본 문자열 표현 이 Object.prototype
반환 됩니다. 이것은 주어진 객체가"[object Promise]"
- 다음과 같은 오 탐지를 무시합니다.
- 생성자 이름이 동일한 자체 정의 개체 유형 ( "Promise")
toString
주어진 객체의 자체 작성 방법.
- 또는 과 달리
instanceof
여러 환경 컨텍스트 (예 : iframe) 에서 작동 isPrototypeOf
합니다.
그러나, 어떤 특정 호스트 오브젝트 의 있으며, 태그를 통해 개질은Symbol.toStringTag
, 반환 할 "[object Promise]"
. 이는 프로젝트에 따라 의도 된 결과 일 수도 있고 아닐 수도 있습니다 (예 : 사용자 정의 Promise 구현이있는 경우).
객체가 기본 ES6 Promise 에서 온 것인지 확인하려면 다음을 사용할 수 있습니다.
function isNativePromise(p) {
return p && typeof p.constructor === "function"
&& Function.prototype.toString.call(p.constructor).replace(/\(.*\)/, "()")
=== Function.prototype.toString.call(/*native object*/Function)
.replace("Function", "Promise") // replacing Identifier
.replace(/\(.*\)/, "()"); // removing possible FormalParameterList
}
따르면 이러한 그리고 이 섹션 사양의 기능의 문자열 표현되어야한다 :
"함수 식별자 ( FormalParameterList opt ) { FunctionBody }"
위의 내용에 따라 처리됩니다. FunctionBody는 것입니다 [native code]
모든 주요 브라우저에서.
MDN : Function.prototype.toString
이것은 여러 환경 컨텍스트에서도 작동합니다.
.then
방법을 확인할 수는 있지만 가지고있는 것이 확실하다는 약속은 없습니다. 그 시점에서 아는 것은 약속 과 같은.then
방법 을 노출시키는 무언가가 있다는 것입니다 .