I'm still trying to get my head around Promises. Let's see if I understand what is going on here...

The call to getBlob returns a promise p1, and we immediately call then() on it which returns a promise p2. p2 is the promise that the user of this API sees.

When p1 resolves, the function passed to then() is invoked and it immediately returns a promise p3.  (If the then callback had returned something other than a promise, then p2 would have been resolved with the return value of the callback?)

Then finally when p3 resolves, that causes p2 to resolve and user of this API gets their then() callback called.

Is that basically what is going on here?  

Its confusing. But maybe that is just because promises are new and they are implictly confusing until we get used to them.  Maybe you could add comments to clarify, but maybe readers of your code just need to get used to working with Promises.