anchor.diff:  link:https://github.com/petkaantonov/bluebird/[bluebird] behind the scenes.
   
   
  -== Rationale
  +=== Rationale
   
   Before I started writing this library I reviewed the following:
   
  
positive.code: ;; => #<Promise [1]>
  ----
  
  If a `promise` function receives a plain value, it returns a resolved promise with the
  provided plain value. If it receives an instance of `Error`, it returns a rejected
  promise.
  
  And finally it also accepts a factory callback that receives two callable parameters:
  `resolve` and `reject`. So you can use one or other to resolve or reject the promise
  
negative.code: And all them have one thing in common, they are not actively maintained.
  
  With the exception of cljs-promises, the other two libraries attempt to emulate the
  clojure promise which is based on a blocking api this is not very natural in
  JavaScript environments.
  
  Also, the last one, uses a core.async abstraction. This is not bad as core.async is
  a very well done library, but it does it in a questionable way in my opinion.
  
  Finally, they all lack good documentation and docstrings.
  
  Instead of reinventing the wheel, the *promise* library uses the powerful and very
  performant link:https://github.com/petkaantonov/bluebird/[bluebird] JavaScript
  promise library and includes it in the package as built in dependency (using
  ClojureScript `:foreign-libs` compiler option).
  
  It exposes a lightweight and idiomatic api for almost all methods and functions
  of the bluebird library. It also includes syntactic sugar for making the code
  resemble ES7 async/await syntax.
  
  
  === Project Maturity
  
  Since _promesa_ is a young project there may be some API breakage.
  
  
  === Install
  
  The simplest way to use _promesa_ library in a ClojureScript project is by including
  it as a dependency in your *_project.clj_*:
  