promises, promises
OMG - I think I am grokking it!!! Very useful articles http://www.2ality.com/2014/10/es6-promises-api.html https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise http://www.html5rocks.com/en/tutorials/es6/promises/
Ok, I did a simple little example. In this example, I am going to read in the contents of a file using async fs.readfile
.
coffee
fs = require 'fs'
{Promise} = require 'es6-promise'
Ok, so we are using the es6-promise
module - we need to import Promise
(which we are doing with destructured assignement).
coffee
myReadFile = (file) ->
new Promise (resolve, reject) ->
fs.readFile file, (err, data) ->
if data?
resolve data.toString()
else
reject err
Create a function with a new Promise object. The object returns two methods to use - resolve (call with data) and reject (call with an error). To passback data, call resolve data
. Similarly, for errors, reject err
.
To run the function once…
coffee
myReadFile 'test.txt'
.then (response) ->
console.log response
.catch (err) ->
console.log err
The Promise.then method will be called when fs.readFile calls resolve
method (with data as a parameter) and the Promise.catch method is invoked when reject
is called (with err as a paramter).
Let’s extend this example to a list of files where the Promise.all
method will run when all of the Promises are completed.
```coffee files2 = [‘test.txt’, ‘test2.txt’, ‘test3.txt’] allresponses = files.map myReadFile
Promise.all(allresponses) .then (response) -> console.log response .catch (err) -> console.log err ```
In this case, the Promise.all
method is called when all of the Promise objects have been resovled.
Ok, let’s chain some functions together.
coffee
myReadFile 'test.txt'
.then (response) ->
console.log 'single run test with chainables'
console.log response
# return response
print response # call print function
.then (response) ->
console.log response
jump response # call jump function
.then (response) ->
console.log response
.catch (err) ->
console.log err
This is the most simple promise
```coffee theMostSimplePromise = (phrase) -> new Promise (resolve) -> resolve phrase
theMostSimplePromise(‘print this’) .then (response) -> console.log response ```
when you create a new Promise, the constructor returns two functions, resolve and reject. The object exposes several methods to call, .then, .catch, .all, .race.