RxJS

или еще одна либа в проекте

RxJS

или еще одна либа в проекте

Асинхронные операции

Callbacks

Callbacks hell

			doSomeStaff(url, callback => {
				doSomeAnotherStaff(var, data => {
					doFinalStaff(data, url => {
						callback(url)
					})
				})
			})
		

Promise

			doSomeStaff(url) 
				.then(var => doSomeAnotherStaff(var))
				.then(data => doFinalStaff(data))
				.then(url => callback(url));
		

Promise эффективно решает

Generator

			function* generate() {
			  yield 1;
			  yield 2;
			  return 3;
			}
			
				let generator = generate();
				let one = generator.next(); // {value: 1, done: false}
				let two = generator.next(); // {value: 2, done: false}
				let three = generator.next(); // {value: 3, done: true}
			
		

 

			function observable() {
			  return 1;
			  return 2;
			  return 3;
			}
		

 

			function observable() {
			  return 1;
			  setTimeout(() => {
			    return 2;
			    return 3;
			  }, 1000);
			}
		

 

			function observable() {
			  return 1;
			  setTimeout(() => {
			    return 2;
			    return 3;
			  }, 1000);
			}
		

 

			function observable(observer) {
			  return 1;
			  setTimeout(() => {
			    return 2;
			    return 3;
			  }, 1000);
			}
		

 

			function observable(observer) {
			  observer(1);
			  setTimeout(() => {
			    observer(2);
			    observer(3);
			  }, 1000);
			}
		

 

			function observable(observer) {
			  observer(1);
			  const id = setTimeout(() => {
			    observer(2);
			    observer(3);
			  }, 1000);
			  return () => clearTimeout(id);
			}
		

Example

Marble diagrams

a$:

Map

a$:
map(a => a * a):

Filter

a$:
filter(a => a % 2):

Merge

a$:
b$:
merge(a$, b$):

combineLatest

a$:
b$:
combineLatest(a$, b$, (a, b) => a + b):

Другие операции

 

			var producer = new Producer();
			var hot = new Observable((observer) => {
			  // have observer listen to producer here
			});
		

 

			var cold = new Observable((observer) => {
			  var producer = new Producer();
			  // have observer listen to producer here
			});
		

 

			const source = new Observable((observer) => {
				const socket = new WebSocket('ws://someurl');
				socket.addEventListener('message', (e) => observer(e));
				return () => socket.close();
			});
		

Спасибо за внимание

A
B
C