首页 > 解决方案 > 在已经解决添加的任何内容的同时动态添加承诺

问题描述

我有一个异步功能,可以说它sendEmail向用户发送电子邮件。我的示例代码如下:

const sampleFunc = (users) => {

    for (const user of users) {
        // process user obj and get 'to', 'from', 'body'
        sendEmail(to, from, body) // this is an async function
    }

    return // return only when all the emails are sent.
}

我想要的是仅在发送所有电子邮件后才返回。我可以通过添加awaitbefore函数轻松地做到这一点,但随后我失去了异步行为,除非电子邮件是为当前用户发送的,否则sendEmail我无法处理下一个对象。user

有没有一种方法可以在我添加时正在处理那些已经添加的实例时动态添加sendEmail到数组之类的东西。Promise.all()sendEmail

例如,如果users数组中有 10 个用户并且当前我正在处理第 5 个user,那么该sendEmail函数已经为前 5 个用户工作,并且我正在动态添加用户。然后就在返回之前,我会等到 10 个用户的所有电子邮件都发送完毕,然后返回。

标签: javascriptasync-await

解决方案


sendEmail返回时,Promise您可以使用Promise.all

const sampleFunc = async (users) => {
    const promises = []
    for (const user of users) {
        // process user obj and get 'to', 'from', 'body'
        promises.push(sendEmail(to, from, body))
    }
    const result = await Promise.all(promises)


    return // return only when all the emails are sent.
}

推荐阅读