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分钟‘);
  }
})

原文地址:https://www.cnblogs.com/xiaozhumaopao/p/11196265.html

时间: 2024-10-01 09:20:18

async/await中reject的问题的相关文章

async/await 中await接收的promise的问题

在async/await中,await接收的需要是一个promise对象,那么我这样写: async getAddressList () { this.list = await AreaSvr.getList(320100); } getAddressList().catch((err) => { ... }); AddressSvr.getList = function (pid) { return new Promise((resolve, reject) => { Vue._http.g

[译]async/await中使用阻塞式代码导致死锁

原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1:Don'tBlock on Async Code 原文2:why the AspNetSynchronizationContext was removed 示例代码:async_await中使用阻塞式代码导致死锁.rar 一.async/await 异步代码运行流

asp.net 异步(async/await)中访问HttpContext的问题

以web api上传文件的官方例子为例: await Request.Content.ReadAsMultipartAsync(provider); 项目里面多处用到session,包括在其他类库中通过HttpContext获取Session对象,在await之后,直接访问Session均为空了. 怎么办,文件得上传啊. 网络搜索无果,后来发现HttpContext竟然支持Set方法,那么在await之前存储HttpContext的引用,在await之后将引用再赋给HttpContext,这样似

如何优雅地处理Async/Await的异常?

译者按: 使用.catch()来捕获所有的异常 原文: Async Await Error Handling in JavaScript 译者: Fundebug 本文采用意译,版权归原作者所有 async/await 中的异常处理很让人混乱.尽管有很多种方式来应对async 函数的异常,但是连经验丰富的开发者有时候也会搞错. 假设你有一个叫做run()的异步函数.在本文中,我会描述 3 种方式来处理run()的异常情形: try/catch, Go 语言风格, 函数调用的时候使用 catch(

[转] Async/Await替代Promise的6个理由

Node.js 7.6已经支持async/await了,如果你还没有试过,这篇博客将告诉你为什么要用它. Async/Await简介 对于从未听说过async/await的朋友,下面是简介: async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. async/await与Promise一样,是非阻塞的. async/await使得异步代码看起来像同步代码,这正是它的魔力所在. Async/A

Async/Await替代Promise的6个理由

译者按: Node.js的异步编程方式有效提高了应用性能:然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码:在实践过程中,却发现Promise并不完美:技术进步是无止境的,这时,我们有了Async/Await. 原文: 6 Reasons Why JavaScript’s Async/Await Blows Promises Away 译者: Fundebug 为了保证可读性,本文采用意译而非直译. Node.js 7.6已经支持async/await了,如果你

js异步回调Async/Await与Promise区别 新学习使用Async/Await

Promise,我们了解到promise是ES6为解决异步回调而生,避免出现这种回调地狱,那么为何又需要Async/Await呢?你是不是和我一样对Async/Await感兴趣以及想知道如何使用,下面一起来看看这篇文章:Async/Await替代Promise的6个理由. 什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. async/await与Prom

Javascript中的async await

async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享async / await是如何工作的,阅读本文前,希望你具备Promise.generator.yield等ES6的相关知识. 在详细介绍async / await之前,先回顾下目前在ES6中比较好的异步处理办法.下面的例子中数据请求用Node.js中的request模块,数据接口采用Github v3

理解ES7中的async/await

优势是:就是解决多层异步回调的嵌套 从字面上理解 async/await, async是 "异步"的含义,await可以认为是 async wait的简写,因此可以理解 async 用于声明一个function是异步的,而await用于等待一个异步方法执行完成返回的值(返回值可以是一个Promise对象或普通返回的值).注意:await 只能出现在 async函数中. 1-1 async的作用?首先来理解async函数是怎么处理返回值的,我们以前写代码都是通过return语句返回我们想