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. python PIL图像处理-生成图片验证码

    生成效果如图: 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random # 打开一个jpg图像文件: im = I ...

  2. 11.5 【Linq 】连接

    11.5.1 使用 join 子句的内连接 如果你打算把一个巨大的序列连接到一个极小的序列上,应尽可能把小序列作为右边序列 class Program { static void Main(strin ...

  3. [MySQL优化案例]系列 — 分页优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  4. NOIp2016-NOIp2011解题报告(骗分)

    zxl钦点.让我练暴力骗分. 那就把2016-2011年的题目搞一搞. NOIp2016 Day1 T1 AC 100pts. (妈呀,这么水的一道题竟然还要调试,一遍过不了样例,果然是要退役的节奏啊 ...

  5. [luogu3244 HNOI2015] 落忆枫音(容斥原理+拓扑排序)

    传送门 Description 给你一张 n 个点 m 条边的DAG,1 号节点没有入边.再向这个DAG中加入边 x→y ,求形成的新图中以 1 为根的外向树形图数 模 10^9+7 . Input ...

  6. lucene_06_solr域

    solr域在家目录下面\solr_home\collection1\conf中的schema.xml里面定义. 域必须要先在schema.xml下定义后才能使用. solr在操作Field域时需要在s ...

  7. mysql 多个select需要放入一个事务吗?

    第一次写博客,还请大家多多支持 今天同事问了个问题:在多个select的时候,用不用放入同一个事务? 首先先看个例子: public class JDBCClient { public static  ...

  8. DJANGO里让用户自助修改密码

    参考了网上的实现,最终实现的各代码如下: changepwd.html模板文件: {% extends "Prism/index.html" %} {% load staticfi ...

  9. [MGR——Mysql的组复制之单主模式 ]详细搭建部署过程

    1,关于MySQL Group Replication   基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由 ...

  10. RubyMine中自动完成只输入部分字母

    RubyMine中自动完成只输入部分字母 1,有下划线情况(其实看第二点跟下划线就关系不大了) 对于attr_reader之类的输入,输入attr之后,下划线可以不输入,然后输入r或者e都可以出来, ...