async/await中reject的问题

promise 返回的 resolve 对象可能用 await 去接,
但是 reject 无法用 await 接收到,所以要用 try catch 去处理

例如发送邮件的接口设置:

async function verify(body){
//发送邮件服务器的配置
  let transporter = nodeMailer.createTransport({
    service:'qq',
    auth:{
      user:SMTP_CONF.user,
      pass:SMTP_CONF.pass
    }
  })
  //用户填写的邮件信息,也就是收邮件的信息
  let ko = {
    code:SMTP_CONF.code(),
    expire:SMTP_CONF.expire(),
    email:body.email,
    user:body.username,
  }
  //发送邮件的内容
  let mailOptinons = {
    from:`'认证邮件'<${SMTP_CONF.user}>`,
    to:ko.email,
    subject:'<实验验证注册码>',
    html:`您的邀请码是${ko.code}`
  }
  let mypromise = new Promise((resolve,reject)=>{
    transporter.sendMail(mailOptinons,(err,info)=>{
        if(err){
            reject(err);
        }
        resolve(info);
    })
  })
  return mypromise;
}

调用函数的时候用try catch 

router.post('/verify',async(ctx,next)=>{
  let result = await verify(ctx.request.body).catch(err=>{
    ctx.body = new ErrorModel('发送失败');
  })
  if(result){
    ctx.body = new SuccessModel('验证码已发送,可能会有延时,有效期1分钟');
  }
})

 

posted @ 2019-07-16 17:24  小猪冒泡  阅读(13582)  评论(0编辑  收藏  举报