如何使forEach循环等待正则表达式替换?

时间:2019-06-18 06:01:18

标签: javascript asynchronous promise async-await

我正在开发一个电子邮件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);
        })



    });

2 个答案:

答案 0 :(得分:1)

由于replaceAll不是异步操作,因此您可以删除Promises的使用,您的代码将以应有的同步方式工作

StartDate

答案 1 :(得分:0)

我认为应该是相反的方式。尝试遍历promise中的收件人列表并替换所有内容,然后在回叫中再次遍历该列表以更新邮政电子邮件中的消息。