Giter Club home page Giter Club logo

bs-prom's Introduction

Prom

A simple collection of functions for working with Javascript promises (Js.Promise) in ReasonML.

API

Prom.make

Use this function to turn a callback into a promise. We can call it to get back a tuple whose first value is a promise that can be passed around, and second value is a function you can call to resolve that promise.

open Prom;

let thingThatReturnsAPromise = () => {
  let (p, resolve) = make();
  thingThatTakesACallback(thingWeWaitedFor => {
    resolve(thingWeWaitedFor)
  });
  p;
}

Prom.map

"map" is another term for Javascript's .then function on a promise. It changes the value inside of a promise into a different value.

open Prom;

// We're talking to a pretend HTTP service that gives us information
// about our fishes.
getNumberOfFishes()
->map(fishesCount => fishesCount * 5);

Prom.flatMap or Prom.andThen

"flatMap" (aka "andThen") is another term for Javascript's .then function on a promise. While "map" changes a value inside a promise, "flatMap" lets you chain promises together, ultimately ending up with just one promise, and potentially changing the value along the way.

open Prom;

// It seems the cost of feeding fish doesn't scale linearly, so we have to
// first get the number of fishes we have, and then ask the fishes service
// how much it'll cost to feed them.
getNumberOfFishes()
->flatMap(fishesCount => getCostOfFoodForFishCount(fishesCount));

Prom.catch

"catch" Just gives us a chance to recover from a rejected promise.

open Prom;

getNumberOfFishes()
->(catch(err => {
  Js.log2("Failed to get fish count from primary service, trying backup", err)
  getNumberOfFishesFromBackupService()
}));

Prom.wrap

"wrap" Takes a value and converts it into a promise of a value, that's all.

open Prom;

let fishCount = 16

thingThatExpectsAPromiseOfFishCount(wrap(fishCount));

Prom.wait

"wait" Is there for when we want to just do something with the result of a value, like printing it to the console, rather than transforming it, or chaining another promise off of it.

open Prom;

getNumberOfFishes()
->wait(Js.log);

Prom.all

"wait" Is there for when we want to just do something with the result of a value, like printing it to the console, rather than transforming it, or chaining another promise off of it.

open Prom;

// Calling this returns a promise of an array of fish details.
let getFishDetails = (fishIds: array(string)) => {
  all(fishIds->Belt.Array.map(getFishDetailsForId))
}

bs-prom's People

Contributors

mrmurphy avatar

Stargazers

Alain Armand avatar Connor Brathwaite avatar

Watchers

James Cloos avatar  avatar

Forkers

idkjs

bs-prom's Issues

Docs example

I tried running the first example in the docs and got the error below when calling make():

Any idea

open Prom;
let thingThatTakesACallback =()=>
  Js.Promise.make(
    (~resolve, ~reject as _) => {
      ignore(Js.Global.setTimeout(() => [@bs] resolve("Done!"), 1000));
      ()
    }
  );


let thingThatReturnsAPromise = () => {
  let (p, resolve) = make();
  thingThatTakesACallback(thingWeWaitedFor => {
    resolve(thingWeWaitedFor)
  });
  p;
}
 This has type: (Js.Promise.t('a), 'a => unit, exn => unit)
  Somewhere wanted: ('b, 'c)

Annotating make did not seem to help. Any guidance would be greatly appreciated.

Thank you and thanks for sharing your ideas.

After posting I realize there is no callback in thingThatTakesACallback....

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.