рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд▓рд╕реА рдХрд╛рд░реНрдп

рдирдорд╕реНрддреЗ!


рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдкрд░ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдк рдлреНрд▓рд┐рдВрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдЖрд▓рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ, рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджрд┐рдорд╛рдЧ рдореИрдВ рдЪрдврд╝рддрд╛ рдирд╣реАрдВ рд╣реВрдБ! рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдБ!


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) //  Future   .map(multiply10); //     lazyMultiply10(2).fork(console.error, console.log); // -> 20 

рдмрд╣реБрдд рднрд╛рд░реА рд╣реИ, рд╣реИ рдирд╛? рдЖрдЗрдП рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред


 const multiply10 = x => x * 10; const lazyMultiply10 = Future.map(multiply10); const value = Future.of(2); //     Future lazyMultiply10(value).fork(console.error, console.log); // -> 20 

рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмреЛрдЭрд┐рд▓ред рдпрд╣ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!


 const lazyMultiply10 = Future.map(x => x * 10); lazyMultiply10(Future.of(2)).fork(console.error, console.log); // -> 20 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


 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); // -> 110 

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рднрд╡рд┐рд╖реНрдп рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рджрд╛ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдХреЗ рдЬрд╛рдиреЗ рдпрд╛рдж рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕реНрдерд┐рд░ рдирд╣реАрдВ, рдПрдкреАрдЖрдИред


 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); // -> [Result1, Result2, Result3] 

рд╕рдВрдЧрдд рд╕рдВрдЧрдд


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЦреБрд╢ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХрд╛ рддрд░реАрдХрд╛ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рднрд╡рд┐рд╖реНрдп рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Future рдореЗрдВ рдПрдХ .promise() рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ Future рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ Promise рдореЗрдВ рд▓рдкреЗрдЯреЗрдЧрд╛ред


 Future .of(10) .promise(); // -> Promise{value=10} 

рд╕рдВрджрд░реНрдн



рд╡рд╣, рд╢рд╛рдпрдж, рд╡рд╣ рд╕рдм рдЬреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ, рдореИрдВ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ред рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛ рдбрд╛рдВрдЯреЗрдВ рдирд╣реАрдВ, рдпрд╣ рд╣реИрдмреЗ рдкрд░ рдореЗрд░реА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рд╣реИред

Source: https://habr.com/ru/post/hi435838/


All Articles