Javascript 如何使用多个承诺工作,如何使用承诺解决问题?

Javascript 如何使用多个承诺工作,如何使用承诺解决问题?,javascript,promise,Javascript,Promise,我试图在一个数组中放入多个承诺,当我控制台时,promiseArray得到一个空数组。不知道它如何打印一个空数组。userRecord是身份验证,在电子邮件中我正在解决这个问题,然后我试图用这种方式解决这个问题 const fn = async campaign => { const promiseArray = []; if (campaign.stage === "active") { userRecord.map(async data => { if

我试图在一个数组中放入多个承诺,当我控制台时,promiseArray得到一个空数组。不知道它如何打印一个空数组。userRecord是身份验证,在电子邮件中我正在解决这个问题,然后我试图用这种方式解决这个问题

const fn = async campaign => {
  const promiseArray = [];
  if (campaign.stage === "active") {
    userRecord.map(async data => {
      if (data.email !== "" && data.email !== undefined) {
        const sendEmail = await SES.sendRawEmail(params).promise();
        promiseArray.push(sendEmail);
      }
    });
  }
  if (campaign.stage === "joined") {
    userRecord.map(async data => {
      if (data.email !== "" && data.email !== undefined) {
        const sendEmailJoined = await SES.sendRawEmail(params).promise();
        promiseArray.push(sendEmailJoined);
      }
    });
  }
console.log(promiseArray)
  //I am trying to resolve this in two ways
  await Promise.all(promiseArray);
  //here is the second method
  await Promise.all(
    promiseArray.map(async promise => {
      await promise;
    })
  );
};

您只是有点困惑在哪里使用async和Wait。不要将其用于映射函数,也不要在将函数推入promise数组时等待该函数

//用于模拟异步的helper函数
常数SES={
sendRawEmail:async params=>{
返回新承诺(res=>{
setTimeout(异步()=>{
控制台日志(params);
res();
},Math.random()*1000);
});
}
}
const fn=异步活动=>{
常量promiseArray=[];
//模拟的一些样本数据
const userRecord=[{电子邮件:”a@a.ch,参数:1},{电子邮件:b@b.ch,参数:2},{电子邮件:c@c.ch,参数:3},{电子邮件:d@d.ch“,参数:4}];
//当你在这里重复代码时,我清理了一下你的if
如果(campaign.stage==“活动”| | campaign.stage==“已加入”){
//也不用在这里等待
//正如@Benjamin Eckardt指出的,用forEach替换map,因为它更适合您的问题
userRecord.forEach(数据=>{
如果(data.email){
//不要在这里等待
//const sendrawmailjoined=wait SES.sendrawmail(params.promise();
//我在这里走了一条捷径
promiseArray.push(SES.sendrawmail(数据));
}
});
}
等待承诺。全部(承诺人)
控制台日志(“完成”);
};

fn({stage:“active”})如果你能正确缩进代码就更好了。两个if块的内容是相同的,除了命名。因此,该代码实际上没有多大意义。你能告诉我什么是
userRecord
吗?只有第一个承诺你指的是最快的承诺吗?@BenjaminEckardt我已经更新了问题和我的问题如果你的承诺数组为空意味着你的逻辑无法填充它。调试它?为了澄清意图,我建议将
userRecord.map(…)
替换为
userRecord.forEach(…)
,因为没有返回任何内容。