directly return a proper promise