schedule timeout in promise instead