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

資訊專欄INFORMATION COLUMN

JavaScript函數(shù)式編程之錯(cuò)誤處理,強(qiáng)壯代碼

Yi_Zhi_Yu / 3252人閱讀

摘要:可當(dāng)我們進(jìn)行函數(shù)式編程時(shí),這樣的方式會(huì)遇到困難,難點(diǎn)在于如何停止。而在函數(shù)式編程中,數(shù)據(jù)在管道中流動(dòng),上一個(gè)函數(shù)的返回值會(huì)傳給下一個(gè)函數(shù),除非報(bào)錯(cuò),事先寫好的流程是停不下來(lái)的。

以下代碼會(huì)用到函數(shù)組合函數(shù)compose,只要知道compose是干什么的就足夠了,如果好奇具體的實(shí)現(xiàn),可以看《JavaScript函數(shù)式編程之函數(shù)組合函數(shù)compose和pipe的實(shí)現(xiàn)》

在寫命令式的代碼時(shí),條件判斷是經(jīng)常使用的,經(jīng)常會(huì)有如下類型的需求

if (isTrue) {
  doSomething();
} else {
  return;
}

比如表單驗(yàn)證

if (!validate1()) return;
if (!validate2()) return;
axios.post(...)

如果有一個(gè)驗(yàn)證沒(méi)有通過(guò),則停止運(yùn)行,只有全部都通過(guò)才會(huì)發(fā)出請(qǐng)求,提交表單。

可當(dāng)我們進(jìn)行函數(shù)式編程時(shí),這樣的方式會(huì)遇到困難,難點(diǎn)在于如何停止。用上面命令式的代碼,return了什么,return到了哪里,我們都不太需要關(guān)心。而在函數(shù)式編程中,數(shù)據(jù)在管道中流動(dòng),上一個(gè)函數(shù)的返回值會(huì)傳給下一個(gè)函數(shù),除非報(bào)錯(cuò),事先寫好的流程是停不下來(lái)的。這時(shí),函數(shù)返回了什么,我們是一定要關(guān)心的。

同樣的需求,用函數(shù)式的寫法

let postData = () => axios.post(...);
let result = compose(postData, validate2, validate1);

我們同樣希望有一個(gè)驗(yàn)證沒(méi)有通過(guò)就立刻停止運(yùn)行,可這是無(wú)法實(shí)現(xiàn)的,即使你在validate1里面寫了一個(gè)return;,這也只不過(guò)是停止了validate1的運(yùn)行,而且還返回了一個(gè)undefined傳給了validate2。

那我們應(yīng)該怎么做?

其實(shí)可以換一個(gè)思路

它要返回,就讓它返回,只要返回值在我們的控制中,不用打斷運(yùn)行同樣也可以達(dá)到目的。

let security = fn => val => val === null || val === undefined ? null : fn(val);

我們就可以用一個(gè)這樣的函數(shù)來(lái)做安全驗(yàn)證,如果出現(xiàn)了驗(yàn)證失敗,發(fā)現(xiàn)有空值,就返回一個(gè)null,如果正確就正常運(yùn)行。

所以,之前的代碼就可以這樣改寫,把可能會(huì)出錯(cuò)的地方全都包起來(lái)

let postData = () => axios.post(...);
let result = compose(security(postData), security(validate2), security(validate1));

首先傳給validate1的值,如果是空,則返回空給下一步,下一步同樣有security的安全驗(yàn)證,接到空值往下傳遞。

看到這里,是不是感覺(jué)這種思路有點(diǎn)熟悉?

我們?cè)谟胑xpress寫路由的時(shí)候,通常會(huì)這樣寫

try {
  doSomething();
} catch(err) {
  next(err);
}

這個(gè)security方法與next(err)就非常相似。

在寫路由的時(shí)候,會(huì)有一個(gè)路由寫在所有路由的最后,專門用來(lái)處理錯(cuò)誤,借用這個(gè)思路,我們同樣也可以在函數(shù)組合時(shí)根據(jù)自己的需要在方程的最后做一些保底的操作,例如

let handleError = x => {
  if (!x) alert("errorMsg");
};
let result = compose(handleError, security(postData), security(validate2), security(validate1));

參考資料:

JS函數(shù)式編程指南

我在github
https://github.com/zhuanyongx...

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

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

相關(guān)文章

  • JavaScript函數(shù)編程管道分支,消除if/else的一種方

    摘要:在函數(shù)式編程中的錯(cuò)誤處理,強(qiáng)壯代碼文章中所用的思路與本篇一樣,只不過(guò)在函數(shù)式編程中的錯(cuò)誤處理,強(qiáng)壯代碼中可以認(rèn)為是以和作為標(biāo)識(shí),而本篇單獨(dú)創(chuàng)造了標(biāo)識(shí)。使用本篇的方法重寫函數(shù)式編程中的錯(cuò)誤處理,強(qiáng)壯代碼中的代碼參考資料函數(shù)式編程指南我在 以下代碼會(huì)用到函數(shù)組合函數(shù)compose,只要知道compose是干什么的就足夠了,如果好奇具體的實(shí)現(xiàn),可以看《JavaScript函數(shù)式編程之函數(shù)組合...

    IntMain 評(píng)論0 收藏0
  • Build Your Own Promise

    摘要:意味著代指的操作由于某些原因失敗。第一步構(gòu)造函數(shù)有三種狀態(tài),。這個(gè)構(gòu)造函數(shù)我們可以先這樣寫創(chuàng)建一個(gè)時(shí),首先進(jìn)行狀態(tài)初始化。所有的都是的,而并不是所有的對(duì)象都是。 一、JavaScript異步編程背景 ? 從去年ES2015發(fā)布至今,已經(jīng)過(guò)去了一年多,ES2015發(fā)布的新的語(yǔ)言特性中最為流行的也就莫過(guò)于Promise了,Promise使得如今JavaScript異步編程如此輕松愜意...

    susheng 評(píng)論0 收藏0
  • 【譯】每個(gè)JavaScript 開(kāi)發(fā)者應(yīng)該了解的10個(gè)面試題

    摘要:避免脆弱的基類問(wèn)題。紅牌警告沒(méi)有提到上述任何問(wèn)題。單向數(shù)據(jù)流意味著模型是單一的事實(shí)來(lái)源。單向數(shù)據(jù)流是確定性的,而雙向綁定可能導(dǎo)致更難以遵循和理解的副作用。原文地址 1. 你能說(shuō)出兩種對(duì) JavaScript 應(yīng)用開(kāi)發(fā)者而言的編程范式嗎? 希望聽(tīng)到: 2. 什么是函數(shù)編程? 希望聽(tīng)到: 3. 類繼承和原型繼承的不同? 希望聽(tīng)到 4. 函數(shù)式編程和面向?qū)ο缶幊痰膬?yōu)缺點(diǎn)? ...

    mykurisu 評(píng)論0 收藏0
  • JavaScript編程全解 —— 基礎(chǔ)

    摘要:函數(shù)式編程最后介紹一下函數(shù)式編程。函數(shù)式編程是一種歷史悠久,而又在最近頗為熱門的話題。函數(shù)式編程在面向?qū)ο笠辉~誕生以前就已經(jīng)存在,不過(guò)它在很長(zhǎng)一段時(shí)間里都被隱藏于過(guò)程式編程面向?qū)ο笠彩沁^(guò)程式編程的一種的概念之下。 2.1 JavaScript特點(diǎn) 總結(jié)以下幾個(gè)特點(diǎn): 解釋型語(yǔ)言 類似與C和Java的語(yǔ)法結(jié)構(gòu) 動(dòng)態(tài)語(yǔ)言 基于原型的面向?qū)ο?字面量的表現(xiàn)能力 函數(shù)式編程 解釋型語(yǔ)言:...

    CoreDump 評(píng)論0 收藏0
  • 【重溫基礎(chǔ)】22.內(nèi)存管理

    摘要:內(nèi)存泄露內(nèi)存泄露概念在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。判斷內(nèi)存泄漏,以字段為準(zhǔn)。 本文是 重溫基礎(chǔ) 系列文章的第二十二篇。 今日感受:優(yōu)化學(xué)習(xí)方法。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1-14篇 【重溫基礎(chǔ)】15.JS對(duì)象介紹 【重溫基礎(chǔ)】16.JSON對(duì)象介紹 【重溫基礎(chǔ)】1...

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

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

0條評(píng)論

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