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分鍾'); } })