前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >reco-fetch

reco-fetch

作者头像
神葳
发布2021-01-22 16:05:07
8950
发布2021-01-22 16:05:07
举报
文章被收录于专栏:神葳总局
  • fetch 必然要替换 XMLHttpRequest ,所以是时候尝试 fetch 了;
  • 本封装仅针对npm引入;
  • 本封装依赖 es6-promise whatwg-fetch ,分别对 promisefetch 进行兼容性处理;
  • 还有一种兼容性处理是依赖 es6-promise isomorphic-fetch ,但是看它的源码就会发现,isomorphic-fetch 只不过是引用了 whatwg-fetch ,并没有做二次开发,isomorphic-fetch 只是将fetch添加为全局,以便其API在客户端和服务器之间保持一致,所以没必要。

# 封装的主要内容

  1. fetch 的请求方式同 $ajaxaxios 都不太一样,并且它本身的get请求同其他请求对数据的处理和herder也不太相同,所以为了统一请求行为,方便请求过程,将请求过程进行封装;
  2. fetch 请求的结果均返回到.then()中,但是平时的习惯是是在 .then() 中处理正确结果,.catch() 中处理错误,所以对请求结果进行统一处理;
  3. fetch 本身没有 请求超时 这个概念,所以通过 Promise.race 来处理,它的作用是多个promise同时运行,返回的结果以最快返回结果的那个promise的值为准。

Fetch for browser.

# Install

代码语言:javascript
复制
$ npm isntall reco-fetch

1

复制

# Including reco-fetch

# Script tag

代码语言:javascript
复制
<script src="/node_modules/reco-fetch/dist/recoFetch.min.js"></script>

1

复制

# Import

代码语言:javascript
复制
import recoFetch from 'reco-fetch'

1

复制

# Config

In addition to the parameters given below, please combine other parameters MDN .

代码语言:javascript
复制
/**
 * @param {String, must} url    API URL
 * @param {String, must} options Parameter objects, including:
 *        method  {String, optional} Request method, default 'get'
 *        headers {Object, optional} Set request header
 *        params  {Object, optional} url parameters
 *        body    {Object, optional} request body
 *        timeout {Number, optional} Request timeout
 *        type    {String, optional} When 'post' requests, you can set: 'json', 'formData'
 */

const options = {
  method: 'post',
  headers: {},
  timeout: 1000,
  body: {
    id: 1,
    value: 2
  }
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

复制

# Example

# GET

代码语言:javascript
复制
const options = {
  method: 'get',
  params: {
    key: 1,
    value: 2
  }
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13

复制

# POST JSON

代码语言:javascript
复制
const options = {
  method: 'post',
  body: {
    key: 1,
    value: 2
  },
  type: 'json'
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13 14

复制

POST formData

代码语言:javascript
复制
const options = {
  method: 'post',
  body: {
    key: 1,
    value: 2
  },
  type: 'formData'
}

// or

const form = document.querySelector('form')
const options = {
  method: 'post',
  body: form
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

复制

# PUT

代码语言:javascript
复制
const options = {
  method: 'put',
  body: {
    key: 1,
    value: 2
  },
  type: 'json'
}

// or

const options = {
  method: 'put',
  body: JSON.stringify({
    key: 1,
    value: 2
  })
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

复制

# DELETE

代码语言:javascript
复制
const options = {
  method: 'delete',
  params: {
    key: 1,
    value: 2
  }
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13

复制

# uploadFile

代码语言:javascript
复制
const fileField = document.querySelector("input[type='file']")

const options = {
  method: 'post',
  body: {
    file: fileField.files[0]
  },
  type: 'formData'
}

// or

const formData = new FormData()
const fileField = document.querySelector("input[type='file']")

formData.append('file', fileField.files[0])

const options = {
  method: 'post',
  body: formData
}

recoFetch(url, options). then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

复制

# License

MIT

如果觉得还可以,欢迎给个 Star

作者个人博客:午后南杂

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-7-21 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 封装的主要内容
  • # Install
  • # Including reco-fetch
    • # Script tag
      • # Import
      • # Config
      • # Example
        • # GET
          • # POST JSON
            • # PUT
              • # DELETE
                • # uploadFile
                • # License
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档