2024年大数据最新ky使用教程(基于fetch的小巧优雅js的http客服端)_ky axios,某大厂开发者对于大数据开发多线程的总结

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

import ky from ‘ky’;

// On https://example.com

const response = await ky(‘unicorn’, {prefixUrl: ‘/api’});
//=> ‘https://example.com/api/unicorn’

const response2 = await ky(‘unicorn’, {prefixUrl: ‘https://cats.com’});
//=> ‘https://cats.com/unicorn’

在前缀URL和输入连接后,将根据页面的URL(如果有)解析结果。
当使用此选项来加强一致性并避免混淆如何处理输入URL时,不允许使用输入中的前导斜杠,因为在使用前缀URL时,输入不会遵循正常的URL解析规则,这会改变前导斜杠的含义。

5.1.6retry

Type: object | number
Default:

  • limit2
  • methodsget put head delete options trace
  • statusCodes408 413 429 500 502 503 504
  • maxRetryAfterundefined

延迟重试的计算方法是使用:retry的次数是从1开始计算,层次从1开始计算

0.3 * (2 ** (retry - 1)) * 1000

重试不会触发使用一个timeout

import ky from 'ky';

const json = await ky('https://example.com', {
	retry: {
		limit: 10,
		methods: ['get'],
		statusCodes: [413]
	}
}).json();
5.1.7timeout

Type: number | false
Default: 10000

如果设置false,将不会使用timeout。timeout是毫秒级别的单位,设置为毫秒级。但是最大不能超过2147483647。

5.1.8hooks

Type: object<string, Function[]>
Default: {beforeRequest: [], beforeRetry: [], afterResponse: []}

在request整个生命周期里面,hooks允许任意的修改。hooks函数是连续的,异步的。

Type: Function[]
Default: []

  1. hooks.beforeRequest  接受request options?
import ky from 'ky';

const api = ky.extend({
	hooks: {
		beforeRequest: [
			request => {
				request.headers.set('X-Requested-With', 'ky');
			}
		]
	}
});

const response = await api.get('https://example.com/api/users');

1.hooks.beforeRetry

import ky from ‘ky’;

const response = await ky(‘https://example.com’, {
    hooks: {
        beforeRetry: [
            async ({request, options, error, retryCount}) => {
                const token = await ky(‘https://example.com/refresh-token’);
                request.headers.set(‘Authorization’, token ${token});
            }
        ]
    }
});

2.hooks.beforeError

import ky from ‘ky’;

await ky(‘https://example.com’, {
    hooks: {
        beforeError: [
            error => {
                const {response} = error;
                if (response && response.body) {
                    error.name = ‘GitHubError’;
                    error.message = ${response.body.message} (${response.status});
                }

return error;
            }
        ]
    }
});

3. hooks.afterResponse

import ky from ‘ky’;

const response = await ky(‘https://example.com’, {
    hooks: {
        afterResponse: [
            (_request, _options, response) => {
                // You could do something with the response, for example, logging.
                log(response);

// Or return a Response instance to overwrite the response.
                return new Response(‘A different response’, {status: 200});
            },

// Or retry with a fresh token on a 403 error
            async (request, options, response) => {
                if (response.status === 403) {
                    // Get a fresh token
                    const token = await ky(‘https://example.com/token’).text();

// Retry with the token
                    request.headers.set(‘Authorization’, token ${token});

return ky(request);
                }
            }
        ]
    }
});

5.1.9 ky.extend(defaultOptions)

生成一个传入option对象的重写默认值新的ky实例,相比之下 in contrast,

import ky from ‘ky’;

const url = ‘https://sindresorhus.com’;

const original = ky.create({
    headers: {
        rainbow: ‘rainbow’,
        unicorn: ‘unicorn’
    }
});

const extended = original.extend({
    headers: {
        rainbow: undefined
    }
});

const response = await extended(url).json();

console.log(‘rainbow’ in response);
//=> false

console.log(‘unicorn’ in response);
//=> true

5.1.10ky.create(defaultOptions)

Create a new Ky instance with complete new defaults.

生成一个带有全部默认配置的新的ky实例。

import ky from ‘ky’;

// On https://my-site.com

const api = ky.create({prefixUrl: ‘https://example.com/api’});

const response = await api.get(‘users/123’);
//=> ‘https://example.com/api/users/123’

const response = await api.get(‘/status’, {prefixUrl: ‘’});
//=> ‘https://my-site.com/status’

5.1.11Cancellation 取消请求

Fetch (and hence Ky) has built-in support for request cancellation through the AbortController APIRead more.

for example:

import ky from ‘ky’;

const controller = new AbortController();
const {signal} = controller;

setTimeout(() => {
    controller.abort();
}, 5000);

try {
    console.log(await ky(url, {signal}).text());
} catch (error) {
    if (error.name === ‘AbortError’) {
        console.log(‘Fetch aborted’);
    } else {
        console.error(‘Fetch error:’, error);
    }
}

FAQ find answer and question

1.怎么在nodejs里面使用ky?

Check out ky-universal.

可以使用ky-universal,地址如下

ky-universalicon-default.png?t=M85Bhttps://github.com/sindresorhus/ky-universal#faq2.怎么在没有打包工具的情况下使用ky,比如没有webpack?

Make sure your code is running as a JavaScript module (ESM), for example by using a <script type="module"> tag in your HTML document. Then Ky can be imported directly by that module without a bundler or other tools.

的代码需

首先你的代码需要运行在ESM下面,举个例子:使用 <script type="module">的标签

在你的html文档里面。然后这个ky可以在没有打包工具或者其他工具情况下直接导入。

3.ky与axios直接有什么区别?

6.完整的封装

6.1request.ts

import ky from ‘ky’;

import { requestCode } from ‘./requestCode’;

import message from ‘…/components/message’

const api = ky.create({

prefixUrl: ‘/’,

headers: {

‘content-type’: ‘application/json’,

},

hooks: {

beforeRequest: [

request => {

request.headers.set(‘X-Requested-With’, ‘ky’);

}

],

afterResponse: [

(_request, _options, response) => {

if (response.status !== 200) {

console.log(response.status)

// TODO  提示错误信息

console.log(response, ‘response’);

console.log(requestCode, ‘requestCode’)

}

return response;

},

],

beforeError: [

(error: any) => {

const { response } = error;

console.log(response)

const { status } = response;

message.warning(requestCode[status])

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

console.log(response)

const { status } = response;

message.warning(requestCode[status])

[外链图片转存中…(img-GYB6vqNB-1715611908526)]
[外链图片转存中…(img-JMPhBXOf-1715611908526)]
[外链图片转存中…(img-EhtI6621-1715611908526)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值