Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
again, do we really want to catch this error?
```javascript
function(e) {console.error(e), return Promise.reject(e);}
```