javascript – Rxjs angular 6/7 mergeMap延迟http请求

前端之家收集整理的这篇文章主要介绍了javascript – Rxjs angular 6/7 mergeMap延迟http请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想使用此代码发送请求(我也尝试过forkJoin),并且在调用之间有延迟:

duplicateElement(id: string): Observable

但.pipe(延迟(1000)无法正常工作:1000毫升后发送每个http请求.

最佳答案
现在两个选择!

基本设置

import * as rx from "rxjs";
import * as rxop from "rxjs/operators";

const startTime = new Date();

function getTimestamp() {
  return (new Date().getTime() - startTime.getTime()) / 1000;
}


const desiredDelay = 750;
const serviceDelay = 500;

// simulating service,you can ignore what's inside
var myService = (b: any) => {
  return rx.of(Math.random()).pipe(
    // To simulate long running service
    rxop.delay(serviceDelay),// Log the timestap after execution,should be ~ desiredDelay + serviceDelay,so by default 1250ms each emitted value
    rxop.tap(() => console.log(`${b} after service result,${getTimestamp()}`)),// simulating the result
    rxop.map(a => "result" + b)
  );
};

延迟后逐个发出值,执行服务并尽快收集结果

of([1,2,3,4,5])
  .pipe(
    // See the initial values
    tap(console.log),// Split array into single values during emit
    // Collect observables and subscribe to next when prevIoUs completes
    concatAll(),// Emit each value as a sequence of observables with a desired delay
    concatMap(a => of(a).pipe(delay(desiredDelay))),// Call service on each value as soon as possible,do not care about the order
    mergeMap(a => myService(a)),// Reduce single values back into array
    // Reduces the values from source observable to a single value that's emitted when the source completes
    reduce

在值上调用服务,等待延迟,然后使用其他值调用服务

of([1,// Call the service
    // Map values to inner observable,subscribe and emit in order
    concatMap(a => myService(a).pipe(delay(desiredDelay))),not necessary
    tap(console.log)
  )
  .subscribe();

猜你在找的JavaScript相关文章