So if you want this to be async following your model you need that function to be called on another thread from another context. The model above gives the browser no clue that it needs to be called from another thread in another context until it's too late.
Adding the ability to use WebGL from WebWorkers would arguably remove the need for many async calls because you can call the blocking calls from a worker and asynchronously notify the main page's JS the work is done.I'm not saying that negates the need for some async APIs. But, I am saying it would be best to first get WebGL available in WebWorkers which would provide a generic solution to all these sync/async issues. Then later, decide which ones should have a specific API