blob: a551ae0c8b33034c0954cebcb0e4f9cf334110cd [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2
3var callBound = require('call-bind/callBound');
4
5var $PromiseThen = callBound('Promise.prototype.then', true);
6
7var Type = require('./Type');
8
9// https://ecma-international.org/ecma-262/6.0/#sec-ispromise
10
11module.exports = function IsPromise(x) {
12 if (Type(x) !== 'Object') {
13 return false;
14 }
15 if (!$PromiseThen) { // Promises are not supported
16 return false;
17 }
18 try {
19 $PromiseThen(x); // throws if not a promise
20 } catch (e) {
21 return false;
22 }
23 return true;
24};