美文网首页
Koa2/NodeJS/ES6: await 能使 async/

Koa2/NodeJS/ES6: await 能使 async/

作者: X4tar | 来源:发表于2020-08-11 23:26 被阅读0次

使用的是 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 的状态,但它仍会将异常继续抛出。

相关文章

网友评论

      本文标题:Koa2/NodeJS/ES6: await 能使 async/

      本文链接:https://www.haomeiwen.com/subject/azlzrktx.html