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

使用RxJS更優(yōu)雅地進(jìn)行定時(shí)請(qǐng)求詳析

 更新時(shí)間:2019年06月02日 11:14:07   作者:敘帝利  
這篇文章主要給大家介紹了關(guān)于如何使用RxJS更優(yōu)雅地進(jìn)行定時(shí)請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用RxJS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在用 Angular 做項(xiàng)目的時(shí)候,遇到了一個(gè)有點(diǎn)麻煩的問(wèn)題。具體問(wèn)題如下:

輪循請(qǐng)求某個(gè)接口,如何保證接口返回的數(shù)據(jù)與請(qǐng)求的順序相同?

實(shí)際的業(yè)務(wù)場(chǎng)景是這樣的:前端需要輪循請(qǐng)求后端接口獲取文件處理進(jìn)度,并在前端用進(jìn)度條展示。如下方所示:

首先想到的肯定是使用 setTimeout 或者 setInterval 進(jìn)行定時(shí)請(qǐng)求。然而結(jié)果有點(diǎn)詭異,進(jìn)度條的變化不是遞增,而是有快有慢,比如 30%,20%,50%,40%這樣。仔細(xì)一想也知道問(wèn)題出在哪,異步請(qǐng)求的結(jié)果并不是按順序返回的。

我在之前的工作中還沒(méi)有遇到過(guò)這類(lèi)需求,所以我并不是很清楚如果用傳統(tǒng)方式應(yīng)該如何解決。然而很慶幸的是 RxJS 正好擅長(zhǎng)處理這樣的問(wèn)題。我立即翻了一下文檔,interval 操作符可以處理定時(shí)任務(wù),而且更強(qiáng)大的是返回結(jié)果也是有順序的。

interval(period: 0 = 0, scheduler: SchedulerLike = async): Observable<number>

首先看一下 interval 的說(shuō)明:

創(chuàng)建一個(gè)可觀察對(duì)象,在規(guī)定的調(diào)度程序中,以規(guī)定的時(shí)間間隔發(fā)出連續(xù)的數(shù)值。

interval 返回一個(gè)可觀察對(duì)象,它可以周期性的發(fā)出遞增數(shù)值,但是第一次發(fā)出值是在第一個(gè)周期結(jié)束之后執(zhí)行的。

以下是官方例子:

import { interval } from 'rxjs';
import { take } from 'rxjs/operators';

const numbers = interval(1000);

const takeFourNumbers = numbers.pipe(take(4));

takeFourNumbers.subscribe(x => console.log('Next: ', x));

// Logs:
// Next: 0
// Next: 1
// Next: 2
// Next: 3

不過(guò)只看官方例子還是有點(diǎn)懵,如果是 http 請(qǐng)求的話應(yīng)該怎么寫(xiě)參數(shù)呢?或者說(shuō)應(yīng)該把 http 請(qǐng)求寫(xiě)在哪里?

這個(gè)地方的坑有點(diǎn)深,通過(guò)翻閱外文資料終于找到答案。直接上代碼。

// 間隔 1s 請(qǐng)求
this.timer$ = interval(1000)
  .pipe(
    // 取消過(guò)時(shí)的請(qǐng)求值
    switchMap(() => {
      return this.http.get(API);
    }),
  )
  .subscribe(
    (res: any) => {
      // 百分?jǐn)?shù)處理邏輯
    },
    () => {
      this.timer$.unsubscribe();
    },
    () => {
      this.timer$.unsubscribe();
    },
  );

總的來(lái)說(shuō)就是通過(guò)管道處理請(qǐng)求。最終的效果很完美。

總結(jié)

RxJS 確實(shí)是一個(gè)非常強(qiáng)大的工具庫(kù),尤其處理異步交互真的是省時(shí)省力,但是國(guó)內(nèi)技術(shù)文章偏少,遇到疑難問(wèn)題還需要查閱國(guó)外文章。歡迎大家評(píng)論交流。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Angular4 反向代理Details實(shí)踐

    Angular4 反向代理Details實(shí)踐

    本篇文章主要介紹了Angular4 反向代理Details實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • angular forEach方法遍歷源碼解讀

    angular forEach方法遍歷源碼解讀

    這篇文章主要為大家詳細(xì)了angular forEach方法遍歷源碼,forEach()方法用于遍歷對(duì)象或數(shù)組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳解Angular組件數(shù)據(jù)不能實(shí)時(shí)更新到視圖上的問(wèn)題

    詳解Angular組件數(shù)據(jù)不能實(shí)時(shí)更新到視圖上的問(wèn)題

    這篇文章主要為大家介紹了Angular組件數(shù)據(jù)不能實(shí)時(shí)更新到視圖上的問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Angular2 (RC5) 路由與導(dǎo)航詳解

    Angular2 (RC5) 路由與導(dǎo)航詳解

    這篇文章主要介紹了Angular2 (RC5) 路由與導(dǎo)航的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Angular2 PrimeNG分頁(yè)模塊學(xué)習(xí)

    Angular2 PrimeNG分頁(yè)模塊學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了Angular2 PrimeNG分頁(yè)模塊學(xué)習(xí)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Angular2中Bootstrap界面庫(kù)ng-bootstrap詳解

    Angular2中Bootstrap界面庫(kù)ng-bootstrap詳解

    不知道大家有沒(méi)有留意,最近angular-ui團(tuán)隊(duì)終于正式發(fā)布了基于 Angular2的Bootstrap界面庫(kù)ng-bootstrap ,之前工作中一直在用 AngularJS 1.x 的UI Bootstrap , 因此對(duì)這個(gè)ng-bootstrap 也是很感興趣,所以第一時(shí)間進(jìn)行試用。這篇文章就給大家詳細(xì)介紹下ng-bootstrap。
    2016-10-10
  • 基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能

    基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Angularjs 依賴(lài)壓縮及自定義過(guò)濾器寫(xiě)法

    Angularjs 依賴(lài)壓縮及自定義過(guò)濾器寫(xiě)法

    這篇文章主要介紹了Angularjs 依賴(lài)壓縮及自定義過(guò)濾器寫(xiě)法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • angular組件間通訊的實(shí)現(xiàn)方法示例

    angular組件間通訊的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于angular組件間通訊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用angular組件具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用Angular自定義字段校驗(yàn)指令的方法示例

    使用Angular自定義字段校驗(yàn)指令的方法示例

    這篇文章主要介紹了使用Angular自定義字段校驗(yàn)指令的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02

最新評(píng)論

杭锦旗| 万源市| 岚皋县| 绥阳县| 巴楚县| 平凉市| 安阳县| 寻乌县| 平定县| 家居| 祁连县| 全州县| 兰溪市| 马龙县| 榆社县| 临朐县| 阿拉尔市| 南皮县| 望城县| 来凤县| 武清区| 东阿县| 博乐市| 道真| 万荣县| 绍兴县| 公安县| 汨罗市| 永宁县| 台南市| 罗平县| 玉林市| 酉阳| 色达县| 吴川市| 论坛| 米林县| 罗田县| 灌南县| 黄骅市| 青川县|