рдирдорд╕реНрддреЗ!
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдкрд░ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдк рдлреНрд▓рд┐рдВрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдЖрд▓рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ, рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджрд┐рдорд╛рдЧ рдореИрдВ рдЪрдврд╝рддрд╛ рдирд╣реАрдВ рд╣реВрдБ! рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдБ!
Fluture
рдлреНрд▓реЙрд╡рди рдбреЗрд╡рд▓рдкрд░ рдПрд▓реНрдбрд╡рд┐рди рд╡реНрд▓рд╛рд╕реНрдмреНрд▓реЛрдо рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдлреНрдпреВрдЪрд░ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рд░рджреНрджреАрдХрд░рдг, рд╕реБрд░рдХреНрд╖рд┐рдд "рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐", "рддреНрд░реБрдЯрд┐-рдореБрдХреНрдд" рдирд┐рд╖реНрдкрд╛рджрди (рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛) рдФрд░ рд╢рд╛рдВрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рдЯреНрд░реЙрд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореИрдВ рдЙрди рддрд░реАрдХреЛрдВ (рд╕рд╛рдзрдиреЛрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
.of(Any)
- рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рд╕реЗ рднрд╡рд┐рд╖реНрдп рдмрдирд╛рддрд╛ рд╣реИ.map(Function)
- рдирд╣реАрдВ, рдпрд╣ Array.map
рдирд╣реАрдВ рд╣реИ, рдпрд╣ Array.map
рд╕рдорд╛рди рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдлрд╝рдВрдХреНрд╢рди рд╣реИ.chainRej(Function)
- рдЬреИрд╕реЗ .chainRej(Function)
рдПрдХ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝рддрд╛ рд╣реИ.fork(Function, Function)
- рднрд╡рд┐рд╖реНрдп рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдЖрд▓рд╕реА рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдирд╛
рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлреНрд▓реЙрд╡рди рдореЗрдВ рдЖрд▓рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ред рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рднрд╡рд┐рд╖реНрдп рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрдгрд┐рдд рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рднрд╡рд┐рд╖реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдЪрд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ! рд╣рдорд╛рд░рд╛ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рд╣реИ
const multiply10 = x => x * 10;
рдЕрдм рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реЗ рдЖрд▓рд╕реА рдмрдирд╛ рджреЗрдВ
const multiply10 = x => x * 10; const lazyMultiply10 = (x) => Future .of(x)
рдмрд╣реБрдд рднрд╛рд░реА рд╣реИ, рд╣реИ рдирд╛? рдЖрдЗрдП рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
const multiply10 = x => x * 10; const lazyMultiply10 = Future.map(multiply10); const value = Future.of(2);
рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмреЛрдЭрд┐рд▓ред рдпрд╣ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!
const lazyMultiply10 = Future.map(x => x * 10); lazyMultiply10(Future.of(2)).fork(console.error, console.log);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
const lazyMultiply10 = Future.map(x => x * 10); const someCalculation = a => Future .of(a) .map(v => v + 1) .chain(v => lazyMultiply10(Future.of(v)); someCalculation(10).fork(console.error, console.log);
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рджрд╛ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдХреЗ рдЬрд╛рдиреЗ рдпрд╛рдж рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕реНрдерд┐рд░ рдирд╣реАрдВ, рдПрдкреАрдЖрдИред
const requestToUnstableAPI = query => request({ method: 'get', uri: `http://unstable-site.com/?${query}` }) .then(res => res.data.value) .catch(errorHandler);
рдПрдХ рд╣реА рд╕рдорд╛рд░реЛрд╣, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рд┐рдкрдЯреЗ
const lazyRequestToUnstableAPI = query => Future .tryP(() => request({ method: 'get', uri: `http://unstable-site.com/?${query}` })) .map(v => v.data.value) .chainRej(err => Future.of(errorHandler(err));
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╛ рддреЛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЫреЛрдЯрд╛рдкрди рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред
рд╕рдорд╛рдирддрд╛
рд╕рдорд╛рдирддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреНрдпреВрдЪрд░ рджреЛ рддрд░реАрдХреЛрдВ рдХреА race(Futures[])
( Promise.race
рд╕рдорд╛рди), parallel(n, Futures[])
рдФрд░ both(Future, Future)
, рд▓реЗрдХрд┐рди рдпрд╣ parallel
рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред
parallel
рд╡рд┐рдзрд┐ рджреЛ рддрд░реНрдХ рд▓реЗрддреА рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рднрд╡рд┐рд╖реНрдп рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рд╛рде рд╕рд░рдгреАред parallel
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ Promise.all
рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Infinity
рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Promise.all
рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
const requestF = o => Future.tryP(() => request(o)); const parallel1 = Future.parallel(1); const lazyReqs = parallel1( [ 'http://site.com', 'http://another-site.com', 'http://one-more-site.com', ] .map(requestF) ); lazyReqs.fork(console.error, console.log);
рд╕рдВрдЧрдд рд╕рдВрдЧрдд
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЦреБрд╢ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХрд╛ рддрд░реАрдХрд╛ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рднрд╡рд┐рд╖реНрдп рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Future рдореЗрдВ рдПрдХ .promise()
рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ Future рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ Promise рдореЗрдВ рд▓рдкреЗрдЯреЗрдЧрд╛ред
Future .of(10) .promise();
рд╕рдВрджрд░реНрдн
рд╡рд╣, рд╢рд╛рдпрдж, рд╡рд╣ рд╕рдм рдЬреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ, рдореИрдВ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ред рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛ рдбрд╛рдВрдЯреЗрдВ рдирд╣реАрдВ, рдпрд╣ рд╣реИрдмреЗ рдкрд░ рдореЗрд░реА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рд╣реИред