欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue超詳細講解重試機制示例

 更新時間:2023年01月05日 15:18:07   作者:loyd3  
這篇文章主要介紹了Vue重試機制示例,重試指的是當(dāng)加載出錯時,有能力重新發(fā)起加載組件的請求。異步組件加載失敗后的重試機制,與請求服務(wù)端接口失敗后的重試機制一樣

重試指的是當(dāng)加載出錯時,有能力重新發(fā)起加載組件的請求。

異步組件加載失敗后的重試機制,與請求服務(wù)端接口失敗后的重試機制一樣。所以,先來討論接口請求失敗后的重試機制是如何實現(xiàn)的, 為此,需要封裝一個fetch函數(shù),用來模擬接口請求:

function fetch(){
	return new Promise((resolve,reject) => {
		// 請求會在1秒后失敗
		setTimeout(()=>{
			reject('err')
		},1000)
	})
}

為了實現(xiàn)失敗后的重試,需要封裝一個load函數(shù),如下面代碼所示:

// load函數(shù)接收一個onError回調(diào)函數(shù)
function load(onError){
	// 請求接口,得到Promise實例
	const p = fetch()
	// 捕獲錯誤
	return p.catch(err=>{
		// 當(dāng)錯誤發(fā)生時,返回一個新的Promise實例,并調(diào)用onError回調(diào)
		// 同時將retry函數(shù)作為onError回調(diào)的參數(shù)
		return new Promise((resolve,reject)=>{
			// retry函數(shù),用來執(zhí)行重試的函數(shù),執(zhí)行該函數(shù)會重新調(diào)用load函數(shù)并發(fā)送請求
			const retry = () => resolve(load(onError))
			const fail = () => reject(err)
			onError(retry, fail)
		})
	})
}

load函數(shù)內(nèi)部調(diào)用fetch函數(shù)來發(fā)送請求,并得到一個Promise實例,并把該實例的resolve

和reject方法暴露給用戶,讓用戶來決定下一步應(yīng)該怎么做。這里,將新的Promise實例的resolve和reject分別封裝為retry函數(shù)和fail函數(shù),并將它們作為onError回調(diào)函數(shù)的參數(shù)。

這樣,用戶就可以在錯誤發(fā)生時主動選擇重試或直接拋出錯誤。

下面的代碼展示了用戶時如何進行重試加載的:

// 調(diào)用load函數(shù)加載資源
load(
	// onError回調(diào)
	(retry) => {
		// 失敗后重試
		retry()
	}
).then(res=>{
	// 成功
	console.log(res)
})

基于這個原理,就可以很容易地將其整合到異步組件的加載流程中,具體實現(xiàn)如下:

function defineAsyncComponent(options){
	if(typeof options === 'function'){
		options = {
			loader: options
		}
	}
	const {loader} = options
	let InnerComp = null
	// 記錄重試次數(shù)
	let retries = 0
	// 封裝load函數(shù)用來加載異步組件
	function load(){
		return loader()
				.catch((err)=>{
					// 如果用戶指定了onError回調(diào),則將控制權(quán)交給用戶
					if(options.onError){
						return new Promise((resolve,reject) => {
							// 重試
							const retry = () => {
								resolve(load())
								retries++
							}
							// 失敗
							const fail = () => reject(err)
							// 作為onError回調(diào)函數(shù)的參數(shù),讓用戶來決定下一步怎么做
							options.onError(retry, fail, retries)
						})
					}else{
						throw error
					}
				}
	}
	return {
		name: 'AsyncComponentWrapper',
		setup(){
			const loaded = ref(false)
			const error = shallowRef(null)
			const loading = ref(false)
			let loadingTimer = null
			if(options.delay){
				loadingTimer = setTimeout(()=>{
					loading.value = true
				}, options.delay);
			}else{
				loading.value = true
			}
			// 調(diào)用load函數(shù)加載組件
			load()
				.then(c=>{
					InnerComp = c
					loaded.value = true
				})
				.catch((err)=>{
					err.value = err
				})
				.finally(()=>{
					loading.value = false
					clearTimeout(loadingTimer)
				})
			// 省略部分代碼
		}
	}
}

到此這篇關(guān)于Vue超詳細講解重試機制示例的文章就介紹到這了,更多相關(guān)Vue重試機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue2.x版本中computed和watch的使用及關(guān)聯(lián)和區(qū)別

    vue2.x版本中computed和watch的使用及關(guān)聯(lián)和區(qū)別

    這篇文章主要介紹了vue2.x版本中computed和watch的使用及關(guān)聯(lián)和區(qū)別,文章圍繞主題展開詳細的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-07-07
  • vue easytable組件使用詳解

    vue easytable組件使用詳解

    Vue Easytable是一個基于Vue.js的數(shù)據(jù)表格組件庫,它提供豐富的功能和靈活的配置,幫助開發(fā)者快速搭建復(fù)雜的數(shù)據(jù)表格界面,這篇文章主要介紹了vue easytable組件使用,需要的朋友可以參考下
    2023-09-09
  • 三步搞定:Vue.js調(diào)用Android原生操作

    三步搞定:Vue.js調(diào)用Android原生操作

    這篇文章主要介紹了三步搞定:Vue.js調(diào)用Android原生操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue echarts繪制甘特圖的示例代碼

    Vue echarts繪制甘特圖的示例代碼

    甘特圖是一種條狀圖,直觀展示項目進展隨時間的走勢及聯(lián)系,其中,項目時間由橫軸表示,項目活動由縱軸表示,本文給大家介紹了Vue echarts繪制甘特圖的實現(xiàn)方法,并有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • 解決vue router使用 history 模式刷新后404問題

    解決vue router使用 history 模式刷新后404問題

    這篇文章主要介紹了解決vue router使用 history 模式刷新后404問題,需要的朋友可以參考下
    2017-07-07
  • Vue實現(xiàn)圖書管理小案例

    Vue實現(xiàn)圖書管理小案例

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)圖書管理小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • vue項目中實現(xiàn)圖片預(yù)覽的公用組件功能

    vue項目中實現(xiàn)圖片預(yù)覽的公用組件功能

    小編接到查看影像的功能需求,根據(jù)需求,多個組件需要用到查看影像的功能,所以考慮做一個公用組件,通過組件傳值的方法將查看影像文件的入?yún)鬟^去。下面小編通過實例代碼給大家分享vue項目中實現(xiàn)圖片預(yù)覽的公用組件功能,需要的朋友參考下吧
    2018-10-10
  • 深入淺析Vue不同場景下組件間的數(shù)據(jù)交流

    深入淺析Vue不同場景下組件間的數(shù)據(jù)交流

    探通過本篇文章給大家探討不同場景下組件間的數(shù)據(jù)“交流”的Vue實現(xiàn)方法,感興趣的朋友一起看看吧
    2017-08-08
  • Vue.js實現(xiàn)動畫與過渡效果的示例代碼

    Vue.js實現(xiàn)動畫與過渡效果的示例代碼

    在現(xiàn)代前端開發(fā)中,用戶體驗至關(guān)重要,一個精美的動畫過渡不僅能提升界面的美觀性,還能讓用戶在使用時感受到流暢的交互體驗,在本文中,我們將深入探討如何在 Vue.js 中實現(xiàn)動畫與過渡效果,并提供示例代碼,需要的朋友可以參考下
    2024-10-10
  • vue項目實戰(zhàn)總結(jié)篇

    vue項目實戰(zhàn)總結(jié)篇

    離放假還有1天,今天小編抽空給大家分享前端時間小編做的vue項目,非常完整,需要的朋友參考下
    2018-02-02

最新評論