add support promise functions