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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)