@@ -13,10 +13,13 @@ var task = require('./_task').set;
1313var microtask = require ( './_microtask' ) ( ) ;
1414var newPromiseCapabilityModule = require ( './_new-promise-capability' ) ;
1515var perform = require ( './_perform' ) ;
16+ var userAgent = require ( './_user-agent' ) ;
1617var promiseResolve = require ( './_promise-resolve' ) ;
1718var PROMISE = 'Promise' ;
1819var TypeError = global . TypeError ;
1920var process = global . process ;
21+ var versions = process && process . versions ;
22+ var v8 = versions && versions . v8 || '' ;
2023var $Promise = global [ PROMISE ] ;
2124var isNode = classof ( process ) == 'process' ;
2225var empty = function ( ) { /* empty */ } ;
@@ -31,7 +34,13 @@ var USE_NATIVE = !!function () {
3134 exec ( empty , empty ) ;
3235 } ;
3336 // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
34- return ( isNode || typeof PromiseRejectionEvent == 'function' ) && promise . then ( empty ) instanceof FakePromise ;
37+ return ( isNode || typeof PromiseRejectionEvent == 'function' )
38+ && promise . then ( empty ) instanceof FakePromise
39+ // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
40+ // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
41+ // we can't detect it synchronously, so just check versions
42+ && v8 . indexOf ( '6.6' ) !== 0
43+ && userAgent . indexOf ( 'Chrome/66' ) === - 1 ;
3544 } catch ( e ) { /* empty */ }
3645} ( ) ;
3746
0 commit comments