首页 > 解决方案 > 在 `Then` 中调用相同的承诺

问题描述

我想知道你是否可以像这样两次调用同一个承诺

//receiver is sent if the mail should be sent to someone else and will have a
//different email boy

const body = (req.body.receiver) === undefined ? 'regular mail': 'admin email body'

//the sendEmail Function takes to, from and body arguments
await sendEmail(req.body.requestedBy, someEmailAddress, body)
        .then(info => {
          console.log(info)
         //a mail should be sent only to requester if req.body.receiver is present in the request
          if (req.body.receiver) {
            await sendEmail(req.body.receiver, someEmailAddress, body)
              .then(res => {
                console.log(res)
              })
              .catch(err => {
                console.log(err)
              })
          }
          return res.send(data)
        })
        .catch(err => {
          console.log('Error:', err)
        })

当然,这将被包装在一个异步函数中,因为我创建的 sendMail 函数返回一个承诺。邮件通过 nodemailer 发送。

标签: javascriptnode.jsnodemailer

解决方案


您在示例中所做的在技术上并不是两次调用相同的承诺。您两次调用相同的函数,sendMail. 每次调用该函数时,它都会返回一个新的 Promise。

所以答案是肯定的,即使它返回一个 Promise,你也可以多次调用该函数,因为它每次都会返回一个新的 Promise。


推荐阅读