Koa2/NodeJS/ES6: await 能使 async/

2020-08-11  本文已影响0人  X4tar

使用的是 Koa2

    'DELETE /:id': async (ctx,next)=>{
        let id = ctx.params.id
        // 校验权限
        // checkPermission 是异步函数。
        new RAService(ctx).checkPermission('user:delete:'+id)
        // await new RAService(ctx).checkPermission('user:delete:'+id)
        let u = await User.findOne({
            where:{id}
        })
    
        await u.destory()
        ctx.response.status = 200
    }

如果此处checkPermission不加await, 一旦函数内部抛出异常,异常交由 catch 处理。但是此处我们未写 catch, 所以一旦出现异常,控制台会抛出 UnhandledPromiseRejectionWarning 的警告,Postman 中的返回结果为 Internal Server Error,即使我们在 checkPermission 内部使用了 ctx.throw(code,msg) 来抛出并返回我们自己定义的异常消息。

但是如果使用了 await ,控制台不会有任何意外的打印输出,并且 Postman 返回结果也是我们在checkPermission 内部使用 ctx.throw(401,ResponseMessage.USER_FORBIDDEN) 来抛出并返回我们自己定义的异常消息。
这是为什么呢? 我们知道 可以 r = await xxxx ,r 可以是 then(r=>{})r, 也可以是 catch(r=>{})r,看你的 async/Promise 的状态,但它仍会将异常继续抛出。

上一篇 下一篇

猜你喜欢

热点阅读