我正在开发一个电子邮件Web应用程序,在其中尝试用用户的实际属性替换某些关键字(名字,姓氏,电子邮件)。目前,我正在遍历收件人列表,并编辑电子邮件内容以使用替换的关键字进行个性化设置。
我的问题:forEach循环会跳过使用的承诺,然后才能使用正则表达式替换关键字。如何在继续下一次迭代之前暂停循环以确保所有关键字都被替换?
recipientList.forEach(function (recipient) {
let setContent = new Promise((resolve,reject) =>{
personalizedContent = replaceAll(emailContent, '[First Name]', firstName);
personalizedContent = replaceAll(emailContent, '[Last Name]', lastName);
personalizedContent = replaceAll(emailContent, '[Email]', recipient.EmailAddress.Address);
resolve(personalizedContent);
})
setContent.then((personalizedContent)=>{
var message = {
"Message": {
"Subject": subject,
"Body": {
"ContentType": "html",
"Content": personalizedContent
},
"ToRecipients": [recipient],
"Attachments": []
},
"SaveToSentItems": "true"
};
postEmail(accessToken,message);
})
});
答案 0 :(得分:1)
由于replaceAll不是异步操作,因此您可以删除Promises的使用,您的代码将以应有的同步方式工作
StartDate
答案 1 :(得分:0)
我认为应该是相反的方式。尝试遍历promise中的收件人列表并替换所有内容,然后在回叫中再次遍历该列表以更新邮政电子邮件中的消息。