use native Promise if available