promise-rejection-tracking.js (864B)
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 // Unhandled rejections are tracked. 13 let reject; 14 let p = new Promise((res_, rej_) => (reject = rej_)); 15 assertEq(rejections.has(p), false); 16 reject('reason'); 17 assertEq(rejections.get(p), UNHANDLED); 18 // Later handling updates the tracking. 19 p.then(_=>_, _=>_); 20 assertEq(rejections.get(p), HANDLED); 21 22 rejections.clear(); 23 24 // Handled rejections aren't tracked at all. 25 p = new Promise((res_, rej_) => (reject = rej_)); 26 assertEq(rejections.has(p), false); 27 p.then(_=>_, _=>_); 28 reject('reason'); 29 assertEq(rejections.has(p), false); 30 31 this.reportCompare && reportCompare(true,true);