亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

高階函數(shù)的使用

Dr_Noooo / 1602人閱讀

摘要:?jiǎn)栴}字節(jié)跳動(dòng)面試時(shí)問題原函數(shù)例如是一個(gè)異步函數(shù),嘗試從服務(wù)器端獲取一些信息并返回一個(gè)。寫一個(gè)新的函數(shù)可以自動(dòng)重試一定次數(shù),并且在使用上和原函數(shù)沒有區(qū)別。解決修改后的函數(shù)如下最后自己寫了個(gè)進(jìn)行測(cè)試結(jié)果符合預(yù)期,問題解決。

問題

字節(jié)跳動(dòng)面試時(shí)問題:原函數(shù)例如fetchData是一個(gè)異步函數(shù),嘗試從服務(wù)器端獲取一些信息并返回一個(gè)Promise。寫一個(gè)新的函數(shù)可以自動(dòng)重試一定次數(shù),并且在使用上和原函數(shù)沒有區(qū)別。

思路

這個(gè)問題其實(shí)不是很難,不過可能是太菜了緊張的原因,當(dāng)時(shí)答得不是很好。不過思路還是很明確的,內(nèi)部通過閉包來計(jì)數(shù),一旦成功獲得數(shù)據(jù)就返回,否則就繼續(xù)嘗試,直到重試次數(shù)達(dá)到上限位置。

function retry(fetch, n) {
    let i = 0
    function tryFetch(err) {
        if (i > n) {
            return "reach try limit:" + err
        } else {
            fetch().then(data => {
                return data
            }).catch(err => {
                i ++
                tryFetch(err)
            })
        }
    }
}

當(dāng)時(shí)差不多就是那么答的,有幾個(gè)問題是,函數(shù)調(diào)用方式與原來不通,按道理應(yīng)該返回一個(gè)Promise,更準(zhǔn)確的說是返回一個(gè)返回Promise的函數(shù),如果有什么問題也應(yīng)該在外面能catch住。另一方面,也許fetch函數(shù)要接受參數(shù),也應(yīng)該傳遞進(jìn)去才行。

解決

修改后的函數(shù)如下

function retry(fetch, n) {
    return function() {
        let args = arguments
        return new Promise((rseolve, reject) => {
            let i = 0
            tryFetch()
            function tryFetch(err) {
                console.log(i)
                if (i > n) {
                    reject("reach max try" + err)
                } else {
                    fetch(...args).then(data => {
                        rseolve(data)
                    }).catch(err => {
                        i ++
                        tryFetch(err)
                    })
                }
            }
        })
    }
}

最后自己寫了個(gè)fetch進(jìn)行測(cè)試

function fetch() {
    console.log(arguments)
    return new Promise((rseolve, reject) => {
        console.log("trying...")
        setTimeout(function() {
            if (Math.random() > 0.9) {
                console.log("resolved")
                rseolve("resolved")
            } else {
                console.log("rejected")
                reject("rejected")
            }
        }, 5000)
    })
}

結(jié)果符合預(yù)期,問題解決。當(dāng)然也可以返回async function,不過和Promise本質(zhì)上是一個(gè)思路。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/101764.html

相關(guān)文章

  • React 深入系列6:高階組件

    摘要:在項(xiàng)目中用好高階組件,可以顯著提高代碼質(zhì)量。高階組件的定義類比于高階函數(shù)的定義。高階函數(shù)接收函數(shù)作為參數(shù),并且返回值也是一個(gè)函數(shù)。 React 深入系列,深入講解了React中的重點(diǎn)概念、特性和模式等,旨在幫助大家加深對(duì)React的理解,以及在項(xiàng)目中更加靈活地使用React。 1. 基本概念 高階組件是React 中一個(gè)很重要且比較復(fù)雜的概念,高階組件在很多第三方庫(kù)(如Redux)中都...

    2shou 評(píng)論0 收藏0
  • React高階組件

    摘要:結(jié)語(yǔ)高階函數(shù)對(duì)于初學(xué)者來說可能不太好理解,但當(dāng)你深入其中,了解其中的原理之后,我們可以使用高階函數(shù)來完成很多的工作。 前段時(shí)間在工作中寫Hybrid頁(yè)面時(shí)遇到了這樣的一個(gè)場(chǎng)景,公司需要一系列的活動(dòng)組件,在每個(gè)組件注冊(cè)的時(shí)候都需要調(diào)用App端提供的一個(gè)接口。一開始也考慮了幾種方式,包括mixin、組件繼承以及react高階組件。但經(jīng)過了種種衡量,最后選擇使用了高階組件的做法。 1、Mix...

    ThinkSNS 評(píng)論0 收藏0
  • 深入淺出React高階組件

    摘要:博客地址背景知識(shí)在開始講述高階組件前,我們先來回顧高階函數(shù)的定義接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù),被稱作高階函數(shù)。 博客地址:http://www.luckyjing.com/post... 背景知識(shí) 在開始講述高階組件前,我們先來回顧高階函數(shù)的定義:接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù),被稱作高階函數(shù)。對(duì)于高階組件,它描述的便是接受React組件作為輸入,輸出...

    yuanzhanghu 評(píng)論0 收藏0
  • 從零開始學(xué)習(xí) React 高階組件

    01、介紹 React 高階組件也叫做 React HOC(High Order Component), 它是react中的高級(jí)技術(shù), 用來重用組件邏輯。 但高階組件本身并不是React API。它只是一種模式,這種模式是由react自身的組合性質(zhì)必然產(chǎn)生的。 那么在學(xué)習(xí)高階組件之前有一個(gè)概念我們必須清楚,就是高階函數(shù)。 02、高階函數(shù) 概念:高階函數(shù)是一個(gè)函數(shù),它接收函數(shù)作為參數(shù)或?qū)⒑瘮?shù)作...

    _Dreams 評(píng)論0 收藏0
  • react進(jìn)階系列:高階組件詳解(一)

    摘要:創(chuàng)建一個(gè)普通函數(shù)因?yàn)榈拇嬖谒宰兂蓸?gòu)造函數(shù)創(chuàng)建一個(gè)方法在方法中,創(chuàng)建一個(gè)中間實(shí)例對(duì)中間實(shí)例經(jīng)過邏輯處理之后返回使用方法創(chuàng)建實(shí)例而恰好,高階組件的創(chuàng)建邏輯與使用,與這里的方法完全一致。因?yàn)榉椒ㄆ鋵?shí)就是構(gòu)造函數(shù)的高階組件。 很多人寫文章喜歡把問題復(fù)雜化,因此當(dāng)我學(xué)習(xí)高階組件的時(shí)候,查閱到的很多文章都給人一種高階組件高深莫測(cè)的感覺。但是事實(shí)上卻未必。 有一個(gè)詞叫做封裝。相信寫代碼這么久了,大...

    NervosNetwork 評(píng)論0 收藏0
  • 學(xué)習(xí)es7Decorator(順帶寫個(gè)react高階組件)

    摘要:為了代碼進(jìn)一步解耦,可以考慮使用高階組件這種模式。開源的高階組件使用提供了一系列使用的高階組件,可以增強(qiáng)組件的行為,可以利用此庫(kù)學(xué)習(xí)高階組件的寫法。通過使用此庫(kù)提供的高階組件,可以方便地讓列表元素可拖動(dòng)。 1. Decorator基本知識(shí) 在很多框架和庫(kù)中看到它的身影,尤其是React和Redux,還有mobx中,那什么是裝飾器呢。 修飾器(Decorator)是一個(gè)函數(shù),用來修改類的...

    xiyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Dr_Noooo

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<