review factory using promise