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. 微信jssdk图片上传

    一.html页面如下: <div class="weui-cell"> <div class="weui-cell__hd"></ ...

  2. esp32使iOS 获取蓝牙外设的Mac地址

    最近在做一个需要上下位机的项目,我负责的任务下位机,使用的主控芯片是esp32.这个项目中有一项是需要手机扫描二维码然后连接作为esp32的蓝牙.二维码中包含了mac地址信息,在手机扫描周围设备的时候 ...

  3. grunt入门 出处:http://artwl.cnblogs.com

    grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...

  4. 洛谷P1339 [USACO09OCT]热浪Heat Wave

    思路:裸SPFA过一遍(建议使用邻接链表存储),无向图,无向图,无向图,重要的事情要说三遍!!!蜜汁RE是什么鬼????第九个点数组开到20K,第十个点数组开到30K才AC.或许我代码写的有bug?( ...

  5. 认识计算机操作系统(day01)

    一.计算机的框架 什么是操作系统?(汽车) 加油系统 油门 用户跟加油子系统交互的窗口.(接口) 方向系统 方向盘 用户跟方向系统的交互接口. 导航系统 ... 汽车的操作系统有很多的子系统来完成.这 ...

  6. [模板]FFT

    郝神并没有令我明白这个. 但是巨神的题解太强了. #include <iostream> #include <complex> #include <cmath> # ...

  7. echarts常用实例

    1.柱状图: 1.需要动态加载的参数是x轴以及柱状图的数值,legendData和seriesData.demo使用是可以直接写死参数,在执行this.initChart()方法即可.具体代码可以参数 ...

  8. 1、dubbo的概念

    Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo[]是 ...

  9. JavaSE 学习笔记之封装(四)

    封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共 ...

  10. JavaSE 学习笔记之Java概述(一)

    一.Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发: JAVASE:Java Platfor ...