Skip to content

Instantly share code, notes, and snippets.

@yarastqt
Last active January 1, 2020 17:29
Show Gist options
  • Save yarastqt/582bdc9c96e1dd1da4fbc1a0b1b14025 to your computer and use it in GitHub Desktop.
Save yarastqt/582bdc9c96e1dd1da4fbc1a0b1b14025 to your computer and use it in GitHub Desktop.
const future = executor => ({
chain(fn) {
return future((resolve, reject) =>
this.fork(
value => fn(value).fork(resolve),
error => reject(error),
)
)
},
map(fn) {
return this.chain(value => future.of(fn(value)))
},
fork(resolve, reject) {
executor(resolve, reject)
return this
},
promise() {
return new Promise((resolve, reject) => {
this.fork(resolve, reject)
})
},
})
future.of = value => future(fn => fn(value))
@yarastqt
Copy link
Author

yarastqt commented Jan 1, 2020

Отличия Future от Promise

  1. Future является ленивым в отличии от Promise, т.е. мы можем описать всю цепочку преобразований и только в нужном месте вызвать fork, тогда как Promise сразу начнет выполнение, вне зависимости от наличия then.
  2. Future не имеет состояний resolved, rejected и является чистым.
  3. Так же есть недостаток, к примеру если через Future мы читаем файл и вызываем fork дважды, то файл будет прочтен два раза (это из-за того, что Future не имеет состояния).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment