DESIGN PATTERNS
@edimitchel
Front-end Lead Developer
@ ALTRAN
@KeziahMoselle
Front-end Developer
@ HOME
MICHEL
KEZIAH
User
Notification
Subject
One to many relationship
Mutation
Observers
Notify
{
  "plugins": [
    [
      "@babel/plugin-proposal-pipeline-operator",
      { "proposal": "minimal" }
    ],
    "@babel/plugin-proposal-partial-application"
  ]
}source: javascript.info/proxy
| IE | Edge | Firefox | Chrome | Safari | 
|---|---|---|---|---|
| No | 12+ | 18+ | 49+ | 10+ | 
Vue.js (vue-next) : Reactivity system will be rewritten with Proxies with various improvements
Synchronize your asynchronous
and event-based code
We know Promises,
Promises are single-shot,
results to an resolve or a reject.
Observables from RxJS are multi-shot,
steams data and handles errors.
promise
    .then(value => console.log(value))
    .catch(err => console.error(err));const observable = new Observable(subscriber => {
  subscriber.next(1);
  subscriber.next(2);
  subscriber.next(3);
  setTimeout(() => {
    subscriber.next(4);
    subscriber.complete();
  }, 1000);
});
// logs: 1, 2, 3 and one second after 4
observable.subscribe(console.log);Observable
Observers
Operators
...subscribes
map
tap
merge
catchError
data
throttle
filter
// returns an Observable
const fetch = APIService.getPosts();
const formatPost = ({ name, date, content }) => ({
  name, date, content
});
fetch.pipe(
  map(posts => posts.map(formatPost))
)
.subscribe(console.log); // logs post formatted// returns an Observable
const fetch = APIService.getPosts();
const formatPost = ({ name, date, content }) => ({
  name, date, content
});
fetch.pipe(
  tap(console.log), // for debugging
  map(posts => posts.map(formatPost))
)
.subscribe(console.log); // logs posts formatted// emits array of objects
const source = from([
  { name: 'Joe', age: 31 },
  { name: 'Bob', age: 25 },
  { name: 'David', age: 20 }
]);
// filter out people with age under 30
const example = source.pipe(
  filter(person => person.age >= 30)
);
//output: "Over 30: Joe"
example.subscribe(person => 
  console.log(`Over 30: ${person.name}`)
);// emits value every 1 second
const source = interval(1000);
// emits the first value, then ignore for 5 seconds
const example = source.pipe(
  throttleTime(5000)
);
// logs: 0...6...12
example.subscribe(console.log);interval operator creates an Observable that
emits each second the time passed.
// emits every 2.5 seconds
const first = interval(2500);
// emits every 2 seconds
const second = interval(2000);
// emits every 1.5 seconds
const third = interval(1500);
// emits every 1 second
const fourth = interval(1000);
// emits outputs from one observable
const example = merge(
  first.pipe(mapTo('FIRST!')),
  second.pipe(mapTo('SECOND!')),
  third.pipe(mapTo('THIRD')),
  fourth.pipe(mapTo('FOURTH'))
);
// logs: "FOURTH", "THIRD", "SECOND!", 
//  "FOURTH", "FIRST!", "THIRD", "FOURTH"
example.subscribe(console.log);// emits error
const source = throwError('API endpoint unreachable');
// gracefully handle error,
// returning observable with error message
const example = source.pipe(
  catchError(val => of(`Something went wrong: ${val}`))
);
// logs: 'Something went wrong: API endpoint unreachable'
example.subscribe(val => console.log(val));RxJS integrated into Vue (with vue-rx)
Official docs
Learning resources
Visualize observables
@KeziahMoselle - @edimitchel - @VueStrasbourg