invoke-resolve-get-once-multiple-calls.js (1287B)
1 // Copyright (C) 2019 Leo Balter. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 description: > 6 Gets constructor's `resolve` method once from zero to many invocations. 7 esid: sec-promise.allsettled 8 info: | 9 6. Let result be PerformPromiseAllSettled(iteratorRecord, C, promiseCapability). 10 11 Runtime Semantics: PerformPromiseAllSettled 12 13 6. Let promiseResolve be ? Get(constructor, `"resolve"`). 14 7. 1. If IsCallable(promiseResolve) is false, throw a TypeError exception. 15 8. Repeat 16 ... 17 i. Let nextPromise be ? Call(promiseResolve, constructor, « nextValue »). 18 features: [Promise.allSettled] 19 ---*/ 20 21 var p1 = Promise.resolve(1); 22 var p2 = Promise.resolve(1); 23 var p3 = Promise.reject(1); 24 var p4 = Promise.resolve(1); 25 var resolve = Promise.resolve; 26 var getCount = 0; 27 var callCount = 0; 28 29 Object.defineProperty(Promise, 'resolve', { 30 configurable: true, 31 get() { 32 getCount += 1; 33 return function() { 34 callCount += 1; 35 return resolve.apply(Promise, arguments); 36 }; 37 } 38 }); 39 40 Promise.allSettled([p1, p2, p3, p4]); 41 42 assert.sameValue( 43 getCount, 1, 'Got `resolve` only once for each iterated value' 44 ); 45 assert.sameValue( 46 callCount, 4, '`resolve` invoked once for each iterated value' 47 ); 48 49 reportCompare(0, 0);