亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue Promise解決回調地獄問題實現(xiàn)方法

 更新時間:2023年01月12日 15:24:57   作者:code_充電站  
這篇文章主要介紹了Vue Promise解決回調地獄問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路

問題

首先,什么是回調地獄:

  • 層嵌套的問題。
  • 每種任務的處理結果存在兩種可能性(成功或失?。?,那么需要在每種任務執(zhí)行結束后分別處理這兩種可能性。

當一個接口需要依賴另一個接口的請求數(shù)據(jù)時,通常有兩種解決方式

  • 將請求數(shù)據(jù)的接口設為同步,之后調另一個接口
  • 在請求數(shù)據(jù)接口的成功回調里調另一個接口

這兩種問題在回調函數(shù)時代尤為突出。Promise 的誕生就是為了解決這兩個問題。

典型的高階函數(shù),將回調函數(shù)作為函數(shù)參數(shù)傳給了readFile。但久而久之,就會發(fā)現(xiàn),這種傳入回調的方式也存在大坑, 比如下面這樣:

fs.readFile('1.json', (err, data) => {
    fs.readFile('2.json', (err, data) => {
        fs.readFile('3.json', (err, data) => {
            fs.readFile('4.json', (err, data) => {
            });
        });
    });
});

回調當中嵌套回調,也稱回調地獄。這種代碼的可讀性和可維護性都是非常差的,因為嵌套的層級太多。而且還有一個嚴重的問題,就是每次任務可能會失敗,需要在回調里面對每個任務的失敗情況進行處理,增加了代碼的混亂程度。

解決方案

Promise 利用了三大技術手段來解決回調地獄:

  • 回調函數(shù)延遲綁定。
  • 返回值穿透。
  • 錯誤冒泡。

首先來舉個例子:

let readFilePromise = (filename) => {
    fs.readFile(filename, (err, data) => {
        if(err) {
            reject(err);
        }else {
            resolve(data);
        }
    })
}
readFilePromise('1.json').then(data => {
    return readFilePromise('2.json')
});

看到?jīng)]有,回調函數(shù)不是直接聲明的,而是在通過后面的 then 方法傳入的,即延遲傳入。這就是回調函數(shù)延遲綁定。

然后我們做以下微調:

let x = readFilePromise('1.json').then(data => {
    return readFilePromise('2.json')//這是返回的Promise
});
x.then(/* 內部邏輯省略 */)

我們會根據(jù) then 中回調函數(shù)的傳入值創(chuàng)建不同類型的Promise, 然后把返回的 Promise 穿透到外層, 以供后續(xù)的調用。這里的 x 指的就是內部返回的 Promise,然后在 x 后面可以依次完成鏈式調用。

這便是返回值穿透的效果。

這兩種技術一起作用便可以將深層的嵌套回調寫成下面的形式:

readFilePromise('1.json').then(data => {
    return readFilePromise('2.json');
}).then(data => {
    return readFilePromise('3.json');
}).then(data => {
    return readFilePromise('4.json');
});

這樣就顯得清爽了許多,更重要的是,它更符合人的線性思維模式,開發(fā)體驗也更好。

兩種技術結合產(chǎn)生了鏈式調用的效果。

這解決的是多層嵌套的問題,那另一個問題,即每次任務執(zhí)行結束后分別處理成功和失敗的情況怎么解決的呢?

Promise采用了錯誤冒泡的方式。其實很簡單理解,我們來看看效果:

readFilePromise('1.json').then(data => {
    return readFilePromise('2.json');
}).then(data => {
    return readFilePromise('3.json');
}).then(data => {
    return readFilePromise('4.json');
}).catch(err => {
  // xxx
})

這樣前面產(chǎn)生的錯誤會一直向后傳遞,被catch接收到,就不用頻繁地檢查錯誤了。

到此這篇關于Vue Promise解決回調地獄問題實現(xiàn)方法的文章就介紹到這了,更多相關Vue Promise回調地獄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 3分鐘讀懂移動端rem使用方法(推薦)

    3分鐘讀懂移動端rem使用方法(推薦)

    這篇文章主要介紹了rem使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Vue中對iframe實現(xiàn)keep alive無刷新的方法

    Vue中對iframe實現(xiàn)keep alive無刷新的方法

    這篇文章主要介紹了Vue中對iframe實現(xiàn)keep alive無刷新的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • vue實現(xiàn)分割驗證碼效果

    vue實現(xiàn)分割驗證碼效果

    這篇文章主要為大家詳細介紹了vue實現(xiàn)分割驗證碼效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue中input被賦值后,無法再修改編輯的問題及解決

    Vue中input被賦值后,無法再修改編輯的問題及解決

    這篇文章主要介紹了Vue中input被賦值后,無法再修改編輯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue 圖標選擇器的實例代碼

    vue 圖標選擇器的實例代碼

    本文通過實例代碼給大家介紹了vue 圖標選擇器的相關知識,圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • 解決vue.js中settimeout遇到的問題(時間參數(shù)短效果不穩(wěn)定)

    解決vue.js中settimeout遇到的問題(時間參數(shù)短效果不穩(wěn)定)

    這篇文章主要介紹了解決vue.js中settimeout遇到的問題(時間參數(shù)短效果不穩(wěn)定),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue中前后端使用WebSocket詳細代碼實例

    Vue中前后端使用WebSocket詳細代碼實例

    websocket通信是很好玩的,也很有用的的通信方式,下面這篇文章主要給大家介紹了關于Vue中前后端使用WebSocket的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Vue3 之 Vue 事件處理指南

    Vue3 之 Vue 事件處理指南

    Vue事件處理是每個Vue項目的必要方面。 它用于捕獲用戶輸入,共享數(shù)據(jù)以及許多其他創(chuàng)造性方式。在本文中,會介紹基礎知識,并提供一些用于處理事件的代碼示例。需要的小伙伴可以參考下面文章的具體內容
    2021-09-09
  • Uniapp中WebView的使用與后退鍵處理教程

    Uniapp中WebView的使用與后退鍵處理教程

    在Uniapp中使用web-view組件來加載H5頁面時,對于后退鍵的處理是一個常見需求,下面這篇文章主要給大家介紹了關于Uniapp中WebView的使用與后退鍵處理的相關資料,需要的朋友可以參考下
    2024-07-07
  • vue 實現(xiàn)上傳按鈕的樣式的兩種方法

    vue 實現(xiàn)上傳按鈕的樣式的兩種方法

    這篇文章主要介紹了vue 定制上傳按鈕的樣式的兩種方法,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論