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

Promise對象all與race方法手寫示例

 更新時間:2022年12月11日 10:13:28   作者:大眼睛圖圖  
這篇文章主要為大家介紹了Promise對象all與race方法手寫示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

在理解了手寫promsie.then的方法后,再來看它的其他方法,感覺真的簡單了不少。

Promise.all

介紹

Promise.all()方法用于將多個 Promise 實例,包裝成一個新的 Promise 實例。

  const p = Promise.all([p1, p2, p3]);

上面代碼中,Promise.all()方法接受一個數(shù)組作為參數(shù),p1、p2、p3都是 Promise 實例。另外,Promise.all()方法的參數(shù)可以不是數(shù)組,但必須具有 Iterator 接口,且返回的每個成員都是 Promise 實例。

p的狀態(tài)由p1、p2、p3決定,分成兩種情況。

(1)只有p1、p2p3的狀態(tài)都變成fulfilled,p的狀態(tài)才會變成fulfilled,此時p1、p2、p3的返回值組成一個數(shù)組,傳遞給p的回調函數(shù)。

(2)只要p1、p2、p3之中有一個被rejected,p的狀態(tài)就變成rejected,此時第一個被reject的實例的返回值,會傳遞給p的回調函數(shù)。

手寫

  • 返回一個Promsie對象
const promiseAll = (array) => {
    return new Promise((resolve, reject) => {
    })
}
  • 判斷傳入的是數(shù)組
const promiseAll = (array) => {
    if (!Array.isArray(array)) {
        throw new Error('要傳入數(shù)組')
    }
    return new Promise((resolve, reject) => {
    }
}
  • 遍歷數(shù)組,再判斷數(shù)組中每個元素是否為Promsie對象的實例,并對此分情況處理
const promiseAll = (array) => {
    if (!Array.isArray(array)) {
        throw new Error('要傳入數(shù)組')
    }
    return new Promise((resolve, reject) => {
        let result = [];
        array.forEach((item, index) => {
            if (item instanceof Promise) {
                item.then(res => {
                    result[index] = res
                },
                    err => { return reject(err) })
            } else {
                result[index] = item
            }
        })
    })
}
  • 設置一個計數(shù)器count,當遍歷完了所有數(shù)組里面的值,就把result數(shù)組打印出來
const promiseAll = (array) => {
    if (!Array.isArray(array)) {
        throw new Error('要傳入數(shù)組')
    }
    return new Promise((resolve, reject) => {
        let result = [];
        let count = 0;
        array.forEach((item, index) => {
            if (item instanceof Promise) {
                item.then(res => {
                    result[index] = res
                    count++;
                    if (count == array.length) {
                        return resolve(result)
                    }
                },
                    err => { return reject(err) })
            } else {
                result[index] = item
                count++;
                if (count == array.length) {
                    return resolve(result)
                }
            }
        })
    })
}

Promise.race

介紹

Promise.race()方法同樣是將多個 Promise 實例,包裝成一個新的 Promise 實例。

const p = Promise.race([p1, p2, p3]);

上面代碼中,只要p1、p2p3之中有一個實例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個率先改變的 Promise 實例的返回值,就傳遞給p的回調函數(shù)。

手寫

  • 返回一個Promise對象
let promiseRace = (array) => {
    return new Promise((resolve, reject) => {
    })
}
  • 判斷傳入的參數(shù)是否為數(shù)組
let promiseRace = (array) => {
    if (!Array.isArray(array)) {
        throw new Error('要返回數(shù)組')
    }
    return new Promise((resolve, reject) => {
    })
}
  • 遍歷數(shù)組,再判斷數(shù)組中每個元素是否為Promsie對象的實例,再對此分情況處理
let promiseRace = (array) => {
    if (!Array.isArray(array)) {
        throw new Error('要返回數(shù)組')
    }
    return new Promise((resolve, reject) => {
        array.forEach((item) => {
            if (item instanceof Promise) {
                item.then(res => {
                    return resolve(res)
                },
                    err => reject(err))
            } else {
                return resolve(item)
            }
        })
    })
}

參考文檔

Promise 對象 - Promise.any()

以上就是Promise對象all與race方法手寫示例的詳細內容,更多關于Promise對象all race方法的資料請關注腳本之家其它相關文章!

相關文章

  • javascript中xml操作實現(xiàn)代碼

    javascript中xml操作實現(xiàn)代碼

    好久沒寫了。感覺今時今日,HTML5 還依然只是一種玩票的東東。但愿 w3c 的標準可以早一點出臺,不要讓各種瀏覽器的兼容問題和支持程度搞死
    2011-11-11
  • JavaScript實現(xiàn)網頁動態(tài)生成表格

    JavaScript實現(xiàn)網頁動態(tài)生成表格

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)網頁動態(tài)生成表格,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 非常不錯的[JS]Cookie精通之路

    非常不錯的[JS]Cookie精通之路

    Cookies,有些人喜歡它們,有些人憎恨它們。但是,很少有人真正知道如何使用它們?,F(xiàn)在你可以成為少數(shù)人中的成員-可以自傲的 Cookie 大師。
    2008-06-06
  • 制作微信小程序的小白簡單入門教程

    制作微信小程序的小白簡單入門教程

    這篇文章主要介紹了制作微信小程序的小白簡單入門教程。本文就是小程序學習筆記,整理成教程的形式,希望對于初學者有用。需要學會的主要知識點都會講到,目標是你讀完這個教程,就能學會怎么寫小程序。
    2022-12-12
  • javascript如何動態(tài)加載表格與動態(tài)添加表格行

    javascript如何動態(tài)加載表格與動態(tài)添加表格行

    在某些時候需要動態(tài)加載表格與動態(tài)添加表格行,在接下來的文章中將為大家介紹下javascript是如何做到的,感興趣的朋友不要錯過
    2013-11-11
  • JavaScript實現(xiàn)瀑布流圖片效果

    JavaScript實現(xiàn)瀑布流圖片效果

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)瀑布流圖片效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解使用Next.js構建服務端渲染應用

    詳解使用Next.js構建服務端渲染應用

    這篇文章主要介紹了詳解使用Next.js構建服務端渲染應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • web頁面和微信小程序頁面實現(xiàn)瀑布流效果

    web頁面和微信小程序頁面實現(xiàn)瀑布流效果

    這篇文章主要介紹了web頁面和微信小程序頁面實現(xiàn)瀑布流效果,本文通過實例代碼圖文介紹,給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-09-09
  • jQuery和JavaScript節(jié)點插入元素的方法對比

    jQuery和JavaScript節(jié)點插入元素的方法對比

    本文主要介紹jQuery與JavaScript節(jié)點的插入方法,以及他們的具體代碼實現(xiàn)方法,大家可以對比下他們之間的不同,希望對大家編寫代碼有所幫助
    2016-11-11
  • 原生JS實現(xiàn)記憶翻牌游戲

    原生JS實現(xiàn)記憶翻牌游戲

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)記憶翻牌游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論

夏津县| 通辽市| 宜阳县| 安溪县| 石柱| 新巴尔虎右旗| 正定县| 乐东| 阳曲县| 济源市| 宾阳县| 治县。| 公安县| 紫金县| 喜德县| 公主岭市| 济宁市| 上栗县| 北海市| 大石桥市| 临洮县| 鸡泽县| 林西县| 横峰县| 合山市| 吐鲁番市| 甘洛县| 博白县| 衢州市| 巢湖市| 常宁市| 许昌县| 沂南县| 长沙县| 固阳县| 平利县| 合作市| 象山县| 平塘县| 莆田市| 江津市|