JSFiddle - React, Tailwind, and code Playground

by johnsonjo4531

HTML

<script src="//npmcdn.com/@reactivex/[email protected]/dist/global/Rx.js"></script>
<script src="//jashkenas.github.io/underscore/underscore-min.js"></script>
<script src="//code.jquery.com/jquery-latest.js"></script>

JavaScript

'use strict';

function filterError (data) {
  var promise;
  if(arguments.length > 1) {
    promise = Promise.all([...arguments]);
  } else {
    promise = Promise.resolve(data);
  }
  promise =promise.catch(()=>({errorFilter: true}));
  return Rx.Observable
    .fromPromise(promise)
    .filter(data=> typeof data === "object" ? !data.errorFilter : true);
}

function filterErrorWrap (data) {
  if(typeof data === "function") {
    return function () {
      var args = arguments;
      let tempFunc = function (data) {
        try {
          return data(...args);
        } catch (e) {
          return {errorFilter: true};
        }
      };
      return Rx.Observable
        .from([data])
        .map(tempFunc)
        .filter(data=> typeof data === "object" ? !data.errorFilter : true);
    };
  } else {
    return filterError;
  }
}

function getPromise (data) {
  return new Promise(function(resolve, reject) {
    if(data%2===0){
      resolve(data);
    } else {
      reject();
    }
  });
}

Rx.Observable.from([1,2,3]).flatMap((data)=> filterErrorWrap(getPromise)(data)).subscribe(x=>console.log('stream 1',x));
/*
Rx.Observable.from([1,2,3]).flatMap(filterErrorWrap(function (data) {
    if(data%2!==0) {
      return data;
    } else {
      throw Error("ignore me");
    }
})).subscribe(x=>console.log('stream 2', x));
*/