首页 > 其他 > 详细

[Functional Programming] Capture Side Effects in a Task / Async

时间:2019-02-26 18:47:02      阅读:167      评论:0      收藏:0      [点我收藏+]

We examine the data structure Task, see some constructors, familiar methods, and finally how it captures side effects through laziness.

 

We are going to check two libarays, one is ‘data.task‘. another is ‘crocks/Async‘:

Install:

npm i -S data.task
npm i -S crocks

 

You can use ‘of‘ construct method:

 Task.of(1)
    .fork(e => console.error(e), a => console.log(a)) // 1

 Async.of(U Wut M8)
  .fork(e => console.error(e),a => console.log(a)) // U Wut M8

 

You can do rejection:

 // Foucs to reject:
 Task.rejected(not work)   
 .fork(e => console.error(e), a => console.log(a)) // not work

 Async.Rejected(Async badguy)
  .fork(e => console.error(e),a => console.log(a)) // Async badguy

 

You can .map / .chain:

 Task.of(1)
    .map(x => x + 1)
    .fork(e => console.error(e), a => console.log(a)) // 2


Task.rejected(1)
    .map(x => x + 1)
    .fork(e => console.error(e), a => console.log(a)) // 1 
    
Async.of(1)
    .map(x => x + 1)
    .fork(e => console.error(e),a => console.log(a)) //2
  
Async.Rejected(1)
    .map(x => x + 1)
    .fork(e => console.error(e),a => console.log(a)) // 1

Task.of(1)
    .map(x => x + 1)
    .chain(x => Task.of(x + 2))
    .fork(e => console.error(e), a => console.log(a)) // 4    

Async.of(1)
    .map(x => x + 1)
    .chain(x => Async.of(x + 2))
    .fork(e => console.error(e),a => console.log(a)) // 4  

 

You can use ‘contructor function‘:

const lunchMissiles = () =>
    new Task((rej, res) => {
        console.log(lunchMissiles);
        res(missile!)
    });    
  
const lunchRocky = () =>
    Async((rej, res) => {
        console.log(lunchRocky);
        res(Rocky!)
    });       

lunchMissiles()
    .map(x => x + "!")
    .fork(e => console.error(e), a => console.log(a)) // lunchMissiles missile!!


lunchRocky()
    .map(x => x + "!")
    .fork(e => console.error(e), a => console.log(a)) // lunchMissiles missile!!    

 

Finally, we can split the side effect without calling ‘fork‘, and you compose with the rest of app:

const taskApp =  lunchMissiles()
.map(x => x + "!");

const asyncApp = lunchRocky()
    .map(x => x + "!")


taskApp.map(x => "   From Task").fork(e => console.error(e), a => console.log(a))
asyncApp.map(x => "   From Async").fork(e => console.error(e), a => console.log(a))

 

[Functional Programming] Capture Side Effects in a Task / Async

原文:https://www.cnblogs.com/Answer1215/p/10439223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!