Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
That that should be this, even though this is that and that is this in this context... ;)  I'll make the change...