support emit callback