res.json()

问题描述

前端向后端发请求,返回res,打印res的值,使用await res.json(),但不清楚res.json()的作用。。。

矛盾点

res中并无json(),那么res.json得到的值是哪里来的

问题解决

Q1:首先打印res.json()发现返回值是对象,对象的内容是后端的一个异常处理返回的值,那么res.json()是怎么拿到这个值的?
A1:不管是请求还是响应都能够包含body对象. body也可以是多种类型的实例.如:ArrayBuffer,ArrayBufferView,Blob,string,URLSearchParams,FormData。Body类定义了以下方法 (这些方法都被 Request和Response所实现)以获取body内容. 这些方法都会返回一个被解析后的promise对象和数据.,如:json()对象,所以这个值是后端返回给前端的,存在于body中

Q2: 那么res.json呢?
A2:res.json()的作用的就是就请求的返回值的转化成json的格式。可前面的await又做了什么?
当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。await可以认为是 async wait的简写,因此可以理解 async 用于声明一个function是异步的,而await用于等待一个异步方法执行完成返回的值(返回值可以是一个Promise对象或普通返回的值)。

Q3:await 的注意点有什么?

  • await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。
  • await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。
  • 在定义函数时我们使用了async关键字。await关键字只能在使用async定义的函数的内部使用。所有async函数都会返回一个promise,该promise最终resolve的值就是你在函数中return的内容。
  • await 是等待async函数返回的Promise对象或其他值,await是一个运算符,用于组成表达式, 如果等待的是一个Promise对象,await会阻塞后面的代码(async调用不会造成堵塞,它内部所有的堵塞都被封装在一个Promise对象中异步执行),等待Promise对象的resolve,然后得到resolve的值,作为await表达式的运输结果。这样就可以理解代码的含义了

Q4: async/await的优势是?
A4:单一的Promise链貌似不能发现 async/await的优势,但是如果需要处理多个Promise组成的then链的时候,优势可以看出来,因为Promise是通过then链来解决多层回调的问题,现在我们又可以使用async/await来进一步优化,他们的优点就是解决多层异步回调的嵌套。使用的情况是假设我们现在有一个需求是,分多个步骤完成,每个步骤都是异步的,并且后面的异步都需要依赖于上一个异步回调返回的数据,进行往下传递。

反思

  • 虽然是别人的写的代码,但出现在项目,就应该搞清楚和明白,不要自己只理解自己的代码

action

  • 不懂的首先去官网看文档,了解大概
  • 通过demo 证明
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 12,041评论 5 22
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 7,668评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,799评论 19 139
  • 1.async语法 async函数自带执行器。async函数的执行,与普通函数一模一样 await表示紧跟在后面的...
    秦小婕阅读 5,265评论 0 1
  • 简单介绍下这几个的关系为方便起见 用以下代码为例简单介绍下这几个东西的关系, async 在函数声明前使用asyn...
    _我和你一样阅读 21,400评论 1 24