成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

rxjs5升級(jí) rx.js6 中的函數(shù)式深入

HelKyle / 653人閱讀

摘要:最近組內(nèi)的在做的升級(jí),這當(dāng)中也涉及到了的升級(jí)。所以這也是今天要說(shuō)的一個(gè)重點(diǎn),的實(shí)現(xiàn),是這次版本升級(jí)最根本的地方。

最近組內(nèi)的angular在做4->6的升級(jí),這當(dāng)中也涉及到了rxjs的升級(jí)。rxjs升級(jí)guide鏈接以下是記錄的一些rxjs的升級(jí)小tips

6版本有非常多的break points,總結(jié)下來(lái)為以下三點(diǎn):

比較多的引用路徑變更

一些方法,函數(shù)增棄

chainable==>pipeable

以上幾點(diǎn),在具體實(shí)踐上,1和2根據(jù)api,以及rx提供的升級(jí)檢查工具,都能比較愉快的完成,但比較有意義的第3點(diǎn),作為一個(gè)對(duì)函數(shù)式編程感興趣的前端碼農(nóng),當(dāng)然要研究一下原委。

其實(shí)1和2都有點(diǎn)為第三點(diǎn)服務(wù)的意思,我們先簡(jiǎn)單說(shuō)下1和2。引用路徑的變更,意味著源碼目錄結(jié)構(gòu)的調(diào)整(這些大家可以下載源碼,自行看下);同時(shí),原來(lái)的rx也采用了和underscore、lodash一樣的導(dǎo)出方式,在寫(xiě)法上,滿足chainable,所以用rx5時(shí),我們是這樣寫(xiě)的:

 var Rx = require("rxjs");
     const Observable = Rx.Observable;
     Observable.range(1,10)
         .filter(x => x % 2 === 0)
         .map(x => x + x)
         .subscribe(x=> console.log(x))

v5的rx導(dǎo)出了一個(gè)核心對(duì)象Observable以及若干的附屬類(lèi)型對(duì)象,然后方法(自有方法(create、subscribe等),以及一些常用的操作符(map、fileter等))定義在這些對(duì)象的prototype上,所以這種定義方式搞起鏈?zhǔn)秸{(diào)用就666,這種實(shí)現(xiàn)不影響其本質(zhì)上的函數(shù)式,但在寫(xiě)法上其實(shí)是面向?qū)ο蟮膫魏瘮?shù)式,但但是奇奇怪怪的,老是搞對(duì)象是什么鬼,說(shuō)好的FP呢。

所以這也是今天要說(shuō)的一個(gè)重點(diǎn),chainable-->pipeable的實(shí)現(xiàn),是rx這次版本升級(jí)最根本的地方。在內(nèi)部實(shí)現(xiàn)上,把原有的操作符都函數(shù)化,同時(shí)在Observable上新增了pipe方法,以下是pipe.ts中的pipe實(shí)現(xiàn)

export function pipe(...fns: Array>): UnaryFunction {
  return pipeFromArray(fns);
}

/* @internal */
export function pipeFromArray(fns: Array>): UnaryFunction {
  if (!fns) {
    return noop as UnaryFunction;
  }

  if (fns.length === 1) {
    return fns[0];
  }

  return function piped(input: T): R {
    return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input);
  };
}

熟悉FP的同學(xué)會(huì)發(fā)現(xiàn),這個(gè)pipe其實(shí)是一個(gè)從左向右執(zhí)行的compose,只不過(guò)它接受的第一個(gè)參數(shù)是this,即當(dāng)前Observable實(shí)例,所以我們第一個(gè)例子在v6中得這么寫(xiě):

import { range } from "rxjs/observable/range";
import { map, filter } from "rxjs/operators";


range(0, 10).pipe(
    filter(x => x % 2 === 0),
    map(x => x + x)
).subscribe(x=> console.log(x))

上例pipe做的事情等同于:mapFn(filterFn(range(0,10)))

chainable==>到pipeable,在寫(xiě)法上是一次更加徹底的函數(shù)式實(shí)踐。

當(dāng)然這種方法->函數(shù)的更改,還有一些更大的好處:

打包時(shí)的按需引入,tree-shake

更好的用戶自定義:更安全(避免對(duì)象prototype定義的全局污染),更方便

寫(xiě)法上更函函數(shù)式:方便用戶進(jìn)行函數(shù)的compose,curry操作,呼應(yīng)2的更方便的自定義

其它更詳盡的點(diǎn),可參考:

rx團(tuán)隊(duì)的說(shuō)明

原文來(lái)自:https://zhuanlan.zhihu.com/p/...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96519.html

相關(guān)文章

  • rxjs5.x】Transformation操作符

    摘要:對(duì)對(duì)象發(fā)出的每個(gè)值,使用指定的函數(shù),進(jìn)行映射處理。示例圖以上代碼運(yùn)行后,控制臺(tái)的輸出結(jié)果緩沖源對(duì)象已發(fā)出的值,直到大小達(dá)到給定的最大。該操作符也會(huì)先處理前一個(gè)對(duì)象,在處理下一個(gè)對(duì)象。 map 對(duì) Observable 對(duì)象發(fā)出的每個(gè)值,使用指定的 project 函數(shù),進(jìn)行映射處理。 var source = Rx.Observable.interval(1000); var newe...

    isaced 評(píng)論0 收藏0
  • rxjs5.x】filter操作符

    摘要:操作符防抖動(dòng),只有當(dāng)另一個(gè)發(fā)射值時(shí),才取源的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。輸出從源數(shù)據(jù)集的第一項(xiàng)開(kāi)始進(jìn)行發(fā)射,直到另一個(gè)開(kāi)始發(fā)射第一個(gè)值時(shí),源停止發(fā)射值。 rxjs5.x filter操作符api debounce 防抖動(dòng),只有當(dāng)另一個(gè)Observable發(fā)射值時(shí),才取源Obervable的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。 // 每次點(diǎn)擊,且當(dāng)計(jì)時(shí)器的最新值未被發(fā)射時(shí),才從計(jì)...

    Forelax 評(píng)論0 收藏0
  • 從命令到響應(yīng)(四)

    摘要:使用的操作符這條從左到右的橫線代表經(jīng)過(guò)操作符轉(zhuǎn)換后的輸出流。返回值通過(guò)判定函數(shù)檢測(cè)的值組成的流。返回值持續(xù)發(fā)出輸入流上的值,直到通知流上發(fā)出值為止。 上期介紹過(guò)了rxjs中的三大件,Observable,subscription,subject,但是在開(kāi)發(fā)過(guò)程我們最常接觸到的東西非操作符莫屬。比如上期代碼中曾出現(xiàn)過(guò)的from就是一個(gè)操作符。rxjs中的操作符大致上可以分為幾類(lèi),創(chuàng)建類(lèi),...

    jaysun 評(píng)論0 收藏0
  • 2017-06-27 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選漫談函數(shù)式編程一十年蹤跡的博客前端每周清單的優(yōu)勢(shì)與劣勢(shì)有望超越在嵌入式及物聯(lián)網(wǎng)的應(yīng)用現(xiàn)狀進(jìn)階系列高階組件詳解一前端之路譯如何充分利用控制臺(tái)掘金程序猿升級(jí)攻略眾成翻譯中文譯如何充分利用控制臺(tái)掘金前端從強(qiáng)制開(kāi)啟壓縮探 2017-06-27 前端日?qǐng)?bào) 精選 漫談 JS 函數(shù)式編程(一) - 十年蹤跡的博客前端每周清單: Vue的優(yōu)勢(shì)與劣勢(shì);Node.js有望超越Java;JS在嵌...

    Eidesen 評(píng)論0 收藏0
  • 專(zhuān)訪 | Angel團(tuán)隊(duì)負(fù)責(zé)人黃明:歷時(shí)半年,騰訊Angel為了開(kāi)源都經(jīng)歷了些什么?

    摘要:詳見(jiàn)騰訊正式版發(fā)布基于與的機(jī)器學(xué)習(xí)高性能計(jì)算平臺(tái)在談及新一代平臺(tái)時(shí),黃明表示,是此次平臺(tái)升級(jí)的一大亮點(diǎn),而只是生態(tài)圈的第一個(gè)成員。對(duì)此,黃明表示,在的開(kāi)發(fā)過(guò)程中,我們一直都是在同和對(duì)標(biāo)性能。 機(jī)器之心原創(chuàng) 作者:高靜宜 2017 年 6 月 16 日,騰訊新一代高性能計(jì)算平臺(tái) Angel 在 Github 上低調(diào)開(kāi)源。開(kāi)源兩周,這個(gè)項(xiàng)目在 Github 上持續(xù)得到關(guān)注,截至目前為止,已...

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

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

0條評(píng)論

閱讀需要支付1元查看
<