Added timeout promise for convenience.