Given that a Peer object doesn't make sense without a created Channel object, I think we should take in the channel object as an argument to the constructor. 

In the Create call above, you then create the peer with the channel object and complete the promise in the then. This way no one can try to create a badly formed promise object by accident.