I have created a small Functional programming library in javascript , which supports developing code by chaining asynchronous and synchronous operations.
Consider this example
function getFromUserService({username, password}) {
    return new Promise((function (resolve) {
        resolve({name: "user", isAdmin: true})
    }))
}
async function login(input) {
 if (null == input) {
        throw new Error("Input Cannot be Null")
    }
const {username, password} = input
    if (null == username || null == password) {
        throw new Error("Input Cannot be Null")
    }
    const result = await getFromUserService(username, password)
    if (result.isAdmin) {
        redirectTo("adminPage")
    } else {
        redirectTo("userPage")
    }
}
The same can be rewritten as
const page = await Optional.of(input)
       .filter(({username, password}) => (null != username && null != password))
        .map(getFromUserService)
        .map(result => result.isAdmin ? "adminPage" : "userPage")
        .toAsync();
    page.ifPresentOrElse(redirectTo, () => {
        throw new Error("Input Cannot be Null")
    })
Using with Fetch
const rawResults = await fetch('https://jsonplaceholder.typicode.com/todos/' + item);
const response = await rawResults.json();
if (response.completed) {
    return response.title
} else {
    return null
}
The above can be rewritten as
return await Optional.of('https://jsonplaceholder.typicode.com/todos/' + item)
    .map(fetch)
    .map(response => response.json())
    .filter(response => response.completed == true)
    .map(response => response.title)
    .getAsync();
Chaining of expressions enables the code concise and help to reasonate better, can easily be composed , combined.
Installation & Usage
 npm install declarative-optional   
//ES6
 import Optional from "declarative-optional";
//Common Js
  const Optional = require( "declarative-optional");
//Increment a Number , which may be null
 Optional.of(input)
    .map(val=>val+1)
    .get()
 

 
    
Top comments (0)