Add promise support to router callbacks