首页 > 编程语言 >[Javascript] Write Observable

[Javascript] Write Observable

时间:2023-09-05 21:14:11浏览次数:45  
标签:function Observable return observer onNext Javascript Write forEach

function Observable(forEach) {
  this._forEach = forEach;
}

Observable.prototype = {
  forEach: function (onNext, one rror, onCompleted) {
    if (typeof onNext === "function") {
      return this._forEach({
        onNext,
        one rror: one rror || function () {},
        onCompleted: onCompleted || function () {},
      });
    } else {
      return this._forEach(onNext);
    }
  },
  map: function (transformer) {
    const self = this;
    return new Observable(function forEach(observer) {
      return self.forEach(
        (data) => {
          observer.onNext(transformer(data));
        },
        (e) => {
          observer.onError(e);
        },
        () => {
          observer.onCompleted();
        }
      );
    });
  },
  filter: function (preditionFn) {
    const self = this;
    return new Observable(function forEach(observer) {
      return self.forEach(
        (data) => {
          if (preditionFn(data)) {
            observer.onNext(data);
          }
        },
        (e) => {
          observer.onError(e);
        },
        () => {
          observer.onCompleted();
        }
      );
    });
  },
  take: function (maxCount) {
    const self = this;
    let count = 0;
    return new Observable(function forEach(observer) {
      return self.forEach(
        (data) => {
          const sub = observer.onNext(data);
          count++;
          if (count === maxCount) {
            observer.onCompleted();
            sub.dispose();
          }

          return sub;
        },
        (e) => {
          observer.onError(e);
        },
        () => {
          observer.onCompleted();
        }
      );
    });
  },
};

Observable.fromEvent = function (dom, eventName) {
  return new Observable(function forEach(observer) {
    const handler = (e) => observer.onNext(e);
    dom.addEventListener(eventName, handler);

    return {
      dispose: () => {
        dom.removeEventListener(eventName, handler);
      },
    };
  });
};

Observable.fromObservations = function (obj) {
  return new Observable(function forEach(observer) {
    const handler = (e) => observer.onNext(e);
    Object?.observe?.(obj, handler);
    return {
      dispose: () => {
        Object?.unobserve?.(obj, handler);
      },
    };
  });
};

 

标签:function,Observable,return,observer,onNext,Javascript,Write,forEach
From: https://www.cnblogs.com/Answer1215/p/17680778.html

相关文章

  • 无涯教程-JavaScript - DAYS360函数
    描述DAYS360函数返回基于360天的年份(十二个月为30天)的两个日期之间的天数,该天数用于会计计算。语法DAYS360(start_date,end_date,[method])争论Argument描述Required/OptionalStart_dateThetwodatesbetweenwhichyouwanttoknowthenumberofdays.Requir......
  • 无涯教程-JavaScript - DAY函数
    描述DAY函数返回日期的日期,由序列号表示。日期以1到31之间的整数形式给出。语法DAY(serialnumber)争论Argument描述Required/Optionalserialnumber您要查找的日期。应该使用DATE函数或其他公式或函数的输出输入日期。如,在2008年5月的第23天使用DATE(2008,5,23......
  • JavaScript之同站多域名共享Token实现方案
    背景由于公司业务涉及到多个国家,每个国家站的访问的域名不同(指向同一个Web服务)在站内能够切换不同的国家,服务端一个token支持所有国家鉴权此时需要前端将Token等相关信息共享到即将跳转到的新站点,因为不同域,浏览器不会共享Cookie方案将Token相关信息通过URLQuery......
  • JavaScript判断数组是否包含某个值的6种方法
    循环functioncontains(arr,val){for(vari=0;i<arr.length;i++){if(arr[i]===val){returntrue;}}returnfalse;}contains([1,2,3],3);//true使用whilefunctioncontains(arr,val){vari=arr.length;......
  • 原生javascript实现拖拽
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • 无涯教程-JavaScript - DATE函数
    描述DATE函数返回特定日期的序列号。语法DATE(year,month,day)争论Argument描述Required/Optionalyearyear参数的值可以包含1-4位数字。Excel会根据计算机使用的日期系统解释年份参数。默认情况下,MicrosoftExcelforWindows使用1900日期系统。请参阅下面的......
  • 无涯教程-JavaScript - DVARP函数
    描述DVARP函数通过使用列表或数据库中符合您指定条件的记录的字段(列)中的数字,基于整个总体计算总体的方差。语法DVARP(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息......
  • 无涯教程-JavaScript - DVAR函数
    描述DVAR函数使用与指定条件相匹配的列表或数据库的列中的数字,根据样本估算总体的方差。语法DVAR(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息的行是记录,数据的列......
  • 软件测试|快速、可靠的JavaScript依赖管理工具——yarn
    简介Yarn是一个由Facebook于2016年推出的JavaScript软件包管理器。它的目标是解决npm(Node.js的默认软件包管理器)在性能和可靠性方面的一些问题。Yarn旨在提供更快、更安全、更稳定的依赖项安装过程,使JavaScript开发人员能够更轻松地管理和构建项目。本文将详细介绍Yarn的特点、优势......
  • JavaScript-属性描述对象
    概述JavaScript提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributesobject)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。下面是属性描述对象的一个例子。{value:123,......