Fetch API  提供了一个 JavaScript接口,用于访问和操纵HTTP管道的部分,例如请求和响应。它还提供了一个全局fetch()方法,该方法提供了一种简单,合乎逻辑的方式来跨网络异步获取资源。

1.fetch()返回Promise对象

一般情况下返回一个已经resolve的Promise对象,只有在网络故障。或则请求被阻止时才会是reject状态的Promise。所以说返回404,500等也会返回resolve状态的Promise。

而resolve的是一个Response对象(Response是Promise对象resolve的结果)。

a)语法:

  fetch(input[,init]);

  input:定义要获取的资源,一般情况会写请求的地址

  init:一个配置项对象,包括所有对请求的设置。可选的参数有

    method: 请求方式:get或post

    headers:请求头信息

    一般设置方式:

    

const default= {
  credentials: 'include',
}; newOptions.headers = {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
...default,
}

    mod : 请求的模式,如 cors、 no-cors 或者 same-origin。

    credentials: 此方式为设置是否发送Cookie,omit不发送,same-origin,同源的才发送,include不管是否同源都会发送cookie
    body:  请求参数,一般情况使用JSON.stringify({参数对象})。
 b) Response对象

  属性:

    status 状态码,eg:200

    ok 返回一个boolean代表成功还是失败

  方法:

    Response实现了Body故而可以使用以下方法:

    json()    读取Response对象,并返回一个解析为json格式的Promise对象。之前看这里有点绕,后来才发现Promise对象可以resolve另外一个Promise对象 

let promise1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("promise1")
},3000)
}) //先打印出promise2,3秒后打印出promise1
let promise2 = new Promise((resolve,reject)=>{
resolve(promise1);
console.log("promise2");
}).then((res)=>{
console.log(res); //三秒后打印出promise1
})

使用fetch请求资源:

mork.json

{
"name":"张三丰",
"age":"20",
"gender":"男"
}

index.js

fetch("./mork.json").then(response=>{
console.log(response);
if(response.status===200){
return response.json();
}
}).then(response=>{
console.log(response);
})

结果:

   后面的就好理解了

    text()  返回一个被解析为USVString格式的promise对象。

    formData()  返回一个被解析为FormData格式的promise对象

    blob()  返回一个被解析为Blob格式的promise对象

 

有些属性和方法可能用的也不是很多,确实要用的话可以再查文档。


说到Promise又不得不提到异步函数 async function

  异步函数返回的也是Promise对象,并且在异步函数中可以使用await

  await操作符是用来等待一个Promise对象,并且只能在async function使用。

  async function 返回值隐式的传递给Promise.resolve

//定义一个Promise供异步函数中await使用
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("hello world")
},3000)
}).then((data)=>{ //为了测试await是不是等待的最后结果加了then
return data.split("");
}) async function test(params) {
let res = await promise;
return res;
} //async function 返回的是异步对象,所以可以继续用then处理
test().then((data)=>{
console.log(data);
})

如何使用fetch的更多相关文章

  1. Git 少用 Pull 多用 Fetch 和 Merge

    本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...

  2. git提示:Fatal:could not fetch refs from ....

    在git服务器上新建项目提示: Fatal:could not fetch refs from git..... 百度搜索毫无头绪,最后FQgoogle,找到这篇文章http://www.voidcn ...

  3. sublime 插件推荐: Nettuts+ Fetch

    Nettuts+ Fetch github地址:Nettuts-Fetch 在sublime中直接用 ctrl+shift+P -> pci -> Nettuts-Fetch 即可下载 这 ...

  4. git pull和git fetch的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...

  5. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

    假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...

  6. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试(转)

    原文地址:http://www.cnblogs.com/downmoon/archive/2012/04/19/2456451.html 在<SQL Server 2012服务端使用OFFSET ...

  7. Attempt to fetch logical page (...) in database 2 failed. It belongs to allocation unit xxxx not to xxx

    今天一个同事说在一个生产库执行某个存储过程,遇到了错误: Fatal error 605 occurred at jul 29 2014 我试着执行该存储过程,结果出现下面错误,每次执行该存储过程,得 ...

  8. Fetch:下一代 Ajax 技术

    Ajax,2005年诞生的技术,至今已持续了 10 年.它是一种在客户端创建一个异步请求的技术,本质上它不算创新,是一组技术的组合.它的核心对象是 XMLHttpRequest. 简单回顾下历史 19 ...

  9. 在 JS 中使用 fetch 更加高效地进行网络请求

    在前端快速发展地过程中,为了契合更好的设计模式,产生了 fetch 框架,此文将简要介绍下 fetch 的基本使用. 我的源博客地址:http://blog.parryqiu.com/2016/03/ ...

  10. 解决:error: Cannot fetch repo (TypeError: expected string or buffer)

    同步源码,问题重现: Fetching project platform/external/libopus Fetching project repo error: Cannot fetch repo ...

随机推荐

  1. 关于JsonArray与JsonObject的使用

    学习地址:http://blog.csdn.net/lishuangzhe7047/article/details/28880009 关于前台向后台传递数组(里面包含json格式) [{"i ...

  2. iphone 事件冒泡规则

    今天碰到的一个比较烦人的问题是,在body上添加事件处理函数,发现在iphone上怎么也没办法触发事件,找了半天,发现iPhone处理冒泡事件的规则: 1.点击某个元素: 2.如果这个元素上没有处理该 ...

  3. nyoj169-素数

    ms  |  内存限制:65535 KB 难度:1 描述 走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起, ...

  4. [luogu2825 HEOI2016/TJOI2016] 游戏 (二分图最大匹配)

    传送门 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看是否能炸到对手,或者躲开对手的炸弹.在玩游戏的过程中,小H想到了 ...

  5. case...when...then if 用法

    select case when if 的一些用法 概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让 ...

  6. 如何快速从数据库获取表属性编写JavaBean

    以前自己对子设计好的数据库将数据库中的表转换为JavaBean,自己还一个一个慢慢打效率真是低,还是老师比较聪明学习学习. 我用的数据库可视化工具是Navicat Premium.UltraEdit( ...

  7. java中的replaceAll方法注意事项

    replaceAll和replace方法参数是不同的,replace的两个参数都是代表字符串,replaceAll的第一个参数是正则表达式 replaceAll中需要注意的特殊字符: \ == \\\ ...

  8. 3. IDEA 的样式设置和快捷键设置

    一.样式设置 首先打开IDEA之后,点击任务栏的“File”→Settings 二.设置快捷键 1.首先打开IDEA之后,点击任务栏的“File”. 2.在下拉列表中中选择“Settings” 3.在 ...

  9. SpringBoot后台如何实现文件上传下载

    1.单文件上传: @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestPar ...

  10. (17)Spring Boot普通类调用bean【从零开始学Spring Boot】

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...