Вы можете попробовать это.
const reflect = p => p.then(v => ({data: v, status: "fulfilled" }),
e => ({data: e, status: "rejected" }));
const emailPromises = emails.map((email)=>email_to_id(email)).map(reflect);
const filterdSuccessPromises = Promise.all(emailPromises)
.then(results=>results
.filter(x => x.status === "resolved")
.map(data=>data.data)
));
На основании этого ответа .Он отображает все значения в объекты, которые говорят, удалось ли это или нет.Затем мы фильтруем значения, которые были успешными.И вы можете получить данные, используя filterdSuccessPromises.then
РЕДАКТИРОВАТЬ: Думая об этом, вы должны на самом деле фильтровать / чистить недействительные электронные письма, прежде чем делать какие-либо звонки дешевле, я не уверен, почему я не предложил это первым
var emails = emails.filter((email)=>email) //or any other validations.