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分钟‘); } })
原文地址:https://www.cnblogs.com/xiaozhumaopao/p/11196265.html
时间: 2024-10-01 09:20:18