invoke-resolve-get-once-multiple-calls.js (1165B)
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.all 8 info: | 9 Runtime Semantics: PerformPromiseAll 10 11 1. Let promiseResolve be ? Get(constructor, `"resolve"`). 12 1. If IsCallable(promiseResolve) is false, throw a TypeError exception. 13 ... 14 1. Repeat, 15 ... 16 1. Let nextPromise be ? Call(promiseResolve, constructor, « nextValue »). 17 ---*/ 18 19 var p1 = Promise.resolve(1); 20 var p2 = Promise.resolve(1); 21 var p3 = Promise.reject(1); 22 var p4 = Promise.resolve(1); 23 var resolve = Promise.resolve; 24 var getCount = 0; 25 var callCount = 0; 26 27 Object.defineProperty(Promise, 'resolve', { 28 configurable: true, 29 get() { 30 getCount += 1; 31 return function() { 32 callCount += 1; 33 return resolve.apply(Promise, arguments); 34 }; 35 } 36 }); 37 38 Promise.all([p1, p2, p3, p4]); 39 40 assert.sameValue( 41 getCount, 1, 'Got `resolve` only once for each iterated value' 42 ); 43 assert.sameValue( 44 callCount, 4, '`resolve` invoked once for each iterated value' 45 ); 46 47 reportCompare(0, 0);