promise-rejection-tracking-optimized.js (841B)
1 // |reftest| skip-if(!xulRuntime.shell) -- needs setPromiseRejectionTrackerCallback 2 3 const UNHANDLED = 0; 4 const HANDLED = 1; 5 6 let rejections = new Map(); 7 function rejectionTracker(promise, state) { 8 rejections.set(promise, state); 9 } 10 setPromiseRejectionTrackerCallback(rejectionTracker); 11 12 // If the return value of then is not used, the promise object is optimized 13 // away, but if a rejection happens, the rejection should be notified. 14 Promise.resolve().then(() => { throw 1; }); 15 drainJobQueue(); 16 17 assertEq(rejections.size, 1); 18 19 let [[promise, state]] = rejections; 20 assertEq(state, UNHANDLED); 21 22 let exc; 23 promise.catch(x => { exc = x; }); 24 drainJobQueue(); 25 26 // we handled it after all 27 assertEq(rejections.get(promise), HANDLED); 28 29 // the right exception was reported 30 assertEq(exc, 1); 31 32 if (this.reportCompare) { 33 reportCompare(true,true); 34 }