Update Promise

- support promises resolved with promises
- throw promises resolved with themselves