Promises
vs
Observables
- Callbacks
 - Generators
 - Async / await
 - Promises
 - Observables
 
getLoggedInUser((err, user) => {
  if (err) {
    displayError();
    return;
  }
  getMoviesForUser(user, (err, userMovies) => {
    if (err) {
      displayError();
      return;
    }
    getMovieDetails(userMovies[0], (err, movieDetails) => {
      if (err) {
        displayError();
        return;
      }
      displayMovie(movieDetails);
    });
  });
});Callbacks
Promises
Value

function createUser(user) {
  return new Promise((resolve, reject) => {
    doCreateUser(user, (err, result) => {
      if(err) {
        reject(err);
      } else {
        resolve(result);
      }
    });
  });
}createUser(user)
  .then(result => display(result))
  .catch(err => displayError());function doSomething(user) {
  return new Promise((resolve, reject) => {
    console.log(`I'm doing some stuff...`);
  });
}
doSomething();function doSomething() {
  return new Promise((resolve, reject) => {
    resolve(1);
    resolve(2);
    reject(3);
  });
}
doSomething().then(onSuccess, onFailure);- Are part of EcmaScript specification
 - Can only be resolved once
 - Are not guaranteed to be resolved
 - Are not lazy
 - Cannot be cancelled
 
Promises
Observables




RxJS
RxJS

import { Observable } from 'rxjs';
const hello = Observable.create(function(observer) {
  observer.next('Hello');
  observer.next('World');
  observer.complete();
});
hello.subscribe(val => console.log(val));const observable = getRealTimeData();Hot'n'Cold
const source = new Observable((observer) => {
  const socket = new WebSocket('ws://my-url');
  socket.addEventListener('message', (event) => {
    observer.next(event);
  });
  return () => socket.close();
});(not the Katy Perry song...)
const socket = new WebSocket('ws://my-url');
const source = new Observable((observer) => {
  socket.addEventListener('message', (event) => {
    observer.next(event);
  });
});import { Observable } from 'rxjs';
const subscription = getData().subscribe(data => console.log(data));
subscription.unsubscribe();- Are not part of EcmaScript specification
 - Can have multiple values
 - Are not guaranteed to be resolved
 - Can be lazy (hot vs cold)
 - Can be cancelled
 
Observables
Promises
vs
Observables
- You have only one event
 - Work must be done only once
 
- Your data could change over time
 - You will receive several events
 - You have complex operations
 - You may need to cancel the operation
 
Thank you!
Promises vs Observables
By ereold
Promises vs Observables
- 1,239