最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

// 調用load函數(shù)加載資源
load(
	// onError回調
	(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回調,則將控制權交給用戶
					if(options.onError){
						return new Promise((resolve,reject) => {
							// 重試
							const retry = () => {
								resolve(load())
								retries++
							}
							// 失敗
							const fail = () => reject(err)
							// 作為onError回調函數(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
			}
			// 調用load函數(shù)加載組件
			load()
				.then(c=>{
					InnerComp = c
					loaded.value = true
				})
				.catch((err)=>{
					err.value = err
				})
				.finally(()=>{
					loading.value = false
					clearTimeout(loadingTimer)
				})
			// 省略部分代碼
		}
	}
}

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

相關文章

  • vue點擊按鈕跳轉到另一個vue頁面實現(xiàn)方法

    vue點擊按鈕跳轉到另一個vue頁面實現(xiàn)方法

    這篇文章主要給大家介紹了關于vue點擊按鈕跳轉到另一個vue頁面的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Vue.js結合Ueditor富文本編輯器的實例代碼

    Vue.js結合Ueditor富文本編輯器的實例代碼

    本篇文章主要介紹了Vue.js結合Ueditor的項目實例代碼,這里整理了詳細的代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • Vue項目添加前綴,ngnix發(fā)布相關修改問題

    Vue項目添加前綴,ngnix發(fā)布相關修改問題

    這篇文章主要介紹了Vue項目添加前綴,ngnix發(fā)布相關修改問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue使用html2canvas和jspdf將html轉成pdf

    vue使用html2canvas和jspdf將html轉成pdf

    在前端開發(fā)中, html轉pdf是最常見的需求,下面這篇文章主要給大家介紹了關于vue如何使用html2canvas和jspdf將html轉成pdf的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • Vue+Element實現(xiàn)網(wǎng)頁版?zhèn)€人簡歷系統(tǒng)(推薦)

    Vue+Element實現(xiàn)網(wǎng)頁版?zhèn)€人簡歷系統(tǒng)(推薦)

    這篇文章主要介紹了Vue+Element實現(xiàn)網(wǎng)頁版?zhèn)€人簡歷系統(tǒng),需要的朋友可以參考下
    2019-12-12
  • vue中添加mp3音頻文件的方法

    vue中添加mp3音頻文件的方法

    本篇文章主要介紹了vue中添加mp3音頻文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue指令工作原理實現(xiàn)方法

    Vue指令工作原理實現(xiàn)方法

    自定義指令是 vue 中使用頻率僅次于組件,其包含 bind 、 inserted 、 update 、 componentUpdated 、 unbind 五個生命周期鉤子,接下來通過本文給大家詳細介紹Vue指令工作原理實現(xiàn)方法,需要的朋友參考下吧
    2021-06-06
  • Vue項目npm操作npm run serve或npm run dev報錯及二者的區(qū)別

    Vue項目npm操作npm run serve或npm run dev報錯及二者

    這篇文章主要介紹了Vue項目npm操作npm run serve或npm run dev報錯及二者的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vuex入門到上手教程

    Vuex入門到上手教程

    這篇文章主要介紹了Vuex入門到上手教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • vue項目的創(chuàng)建的步驟(圖文教程)

    vue項目的創(chuàng)建的步驟(圖文教程)

    本文主要介紹了vue項目的創(chuàng)建的步驟(圖文教程),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

精河县| 沙坪坝区| 九龙城区| 扬州市| 贞丰县| 北宁市| 通榆县| 漳平市| 蒙山县| 桑植县| 吉林市| 基隆市| 隆昌县| 若尔盖县| 饶平县| 江油市| 枣庄市| 呼伦贝尔市| 屯门区| 南川市| 黑龙江省| 香港| 沙雅县| 田林县| 竹山县| 孟连| 双流县| 五指山市| 津市市| 宁国市| 达孜县| 壶关县| 大竹县| 新平| 会理县| 盘锦市| 喜德县| 新巴尔虎左旗| 班玛县| 新昌县| 綦江县|