Support nearly any promise that responds to then()