Why async/await changes nothing in Apps Script
Apps Script runs on V8, which is the same JavaScript engine Chrome uses, so the syntax is valid — async functions, await expressions, Promise chains all parse without errors. The trap is that V8 alone does not give you concurrency. Concurrency in Node.js comes from libuv's event loop dispatching I/O callbacks while your thread does other work. Apps Script has no equivalent mechanism. When execution hits an awaited UrlFetchApp.fetch() call, the runtime blocks the script thread until the response arrives, exactly as it would in a plain synchronous call. The await keyword resolves the Promise, but the HTTP round-trip itself is still serial.
The first time I ran a timing test on this I convinced myself the script was broken: an async rewrite of a five-endpoint loop finished in 4.8 seconds, same as the synchronous original. It wasn't broken. Every await was just stalling the one thread in order, one call at a time.