摘要:?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
摘要:在項(xiàng)目中用好高階組件,可以顯著提高代碼質(zhì)量。高階組件的定義類比于高階函數(shù)的定義。高階函數(shù)接收函數(shù)作為參數(shù),并且返回值也是一個(gè)函數(shù)。 React 深入系列,深入講解了React中的重點(diǎn)概念、特性和模式等,旨在幫助大家加深對(duì)React的理解,以及在項(xiàng)目中更加靈活地使用React。 1. 基本概念 高階組件是React 中一個(gè)很重要且比較復(fù)雜的概念,高階組件在很多第三方庫(kù)(如Redux)中都...
摘要:結(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...
摘要:博客地址背景知識(shí)在開始講述高階組件前,我們先來回顧高階函數(shù)的定義接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù),被稱作高階函數(shù)。 博客地址:http://www.luckyjing.com/post... 背景知識(shí) 在開始講述高階組件前,我們先來回顧高階函數(shù)的定義:接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù),被稱作高階函數(shù)。對(duì)于高階組件,它描述的便是接受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ù)作...
摘要:創(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è)詞叫做封裝。相信寫代碼這么久了,大...
摘要:為了代碼進(jìn)一步解耦,可以考慮使用高階組件這種模式。開源的高階組件使用提供了一系列使用的高階組件,可以增強(qiáng)組件的行為,可以利用此庫(kù)學(xué)習(xí)高階組件的寫法。通過使用此庫(kù)提供的高階組件,可以方便地讓列表元素可拖動(dòng)。 1. Decorator基本知識(shí) 在很多框架和庫(kù)中看到它的身影,尤其是React和Redux,還有mobx中,那什么是裝飾器呢。 修飾器(Decorator)是一個(gè)函數(shù),用來修改類的...
閱讀 1051·2021-11-22 09:34
閱讀 2251·2021-11-11 16:54
閱讀 2277·2021-09-27 14:00
閱讀 995·2019-08-30 15:55
閱讀 1584·2019-08-29 12:46
閱讀 661·2019-08-26 18:42
閱讀 775·2019-08-26 13:31
閱讀 3273·2019-08-26 11:52