onEnterFrame-async-01.js (777B)
1 // async functions fire onEnterFrame each time they resume, like generators 2 3 let g = newGlobal({newCompartment: true}); 4 g.eval(` 5 async function timeout(n) { 6 for (let i = 0; i < n; i++) { 7 await Promise.resolve(i); 8 } 9 } 10 async function job() { 11 let racer = timeout(5); 12 await timeout(3); 13 await racer; 14 } 15 `); 16 17 let dbg = Debugger(g); 18 let log = ""; 19 let nicknames = ["job", "t5", "t3"]; 20 dbg.onEnterFrame = frame => { 21 if (!("nickname" in frame)) 22 frame.nickname = nicknames.shift() || "FAIL"; 23 log += "(" + frame.nickname; 24 frame.onPop = completion => { log += ")"; }; 25 }; 26 27 g.job(); 28 drainJobQueue(); 29 assertEq(log, 30 "(job(t5)(t3))" + 31 "(t5)(t3)".repeat(3) + 32 "(t5)(job)(t5)(job)");