Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript(DynamoDB和Facebook API)中使用任务单子和阅读器单子_Javascript_Functional Programming_Pointfree_Fantasyland - Fatal编程技术网

在javascript(DynamoDB和Facebook API)中使用任务单子和阅读器单子

在javascript(DynamoDB和Facebook API)中使用任务单子和阅读器单子,javascript,functional-programming,pointfree,fantasyland,Javascript,Functional Programming,Pointfree,Fantasyland,在这里,我们试图用javascript以函数的方式进行大量调用,问题是我们最终得到了Reader.of(Task.of(Reader.of(Task.of)),所以我们需要映射(map(map)))我们需要操作的值 计算需要转到DynamoDB表,获取一个特定属性,然后再次转到DynamoDB并获取另一个属性,然后转到facebookapi获取一个集合,最后将该信息存储在Dynamo的一个表中。因此,每个调用都在节点中使用AWS javascript插件和facebook图形插件。所以我们需要在

在这里,我们试图用javascript以函数的方式进行大量调用,问题是我们最终得到了Reader.of(Task.of(Reader.of(Task.of)),所以我们需要映射(map(map)))我们需要操作的值

计算需要转到DynamoDB表,获取一个特定属性,然后再次转到DynamoDB并获取另一个属性,然后转到facebookapi获取一个集合,最后将该信息存储在Dynamo的一个表中。因此,每个调用都在节点中使用AWS javascript插件和facebook图形插件。所以我们需要在run上传递AWS依赖,然后我们需要fork,然后再次传递AWS和fork,然后再次在run和fork上传递FBGraph,如果您正在构建一个计算,这有点乏味

无论如何,代码如下:

require('pointfree-fantasy').expose(global)
import Reader from 'fantasy-readers'
import Task from 'data.task'
import _ from 'ramda'


const log = x => {console.log(x); return x}

const ReaderTask = Reader.ReaderT(Task)

// scan :: string -> [a]
const scan = x => Reader.ask.map(env => env.aws.scanAsync({tableName: x}))

// batchGetItems :: [a] -> [b]
const batchGetItem = x => Reader.ask.map(env => env.aws.batchGetItemAsync(x))

// batchWriteItem :: [a] -> [b]
const batchWriteItem = x => Reader.ask.map(env => env.aws.batchWriteItemAsync(x))

// scanCampaigns :: null -> [a]
const scanCampaigns = () => scan('CampaignStats')

const FBBatchGetItem = x => Reader.ask.map(env => env.fb.batchAsync(x))

const getCampaigns = compose(scanCampaigns, Reader.of)

const groupUsers = _.groupBy(x => x.user_fbid)

const batchGetAccessToken = chain(batchGetItem, ReaderTask.of)

const getCampaignsInsights = chain(FBBatchGetItem, ReaderTask.of)

const saveInsights = chain(batchWriteItem, ReaderTask.of)

const updateCampaignStats = chain(batchWriteItem, ReaderTask.of)

const taskOfEvery = (Task, num) => compose(map(Task.of),_.splitEvery(num))

const runTaskWithFn = (fn, task) => fn(task.fork(err => 'err', x => x))

const filterActive = _.filter(x => x.active === 'true')

const getItems = x => x.Items

const groupAndFilter = compose(groupUsers, filterActive, getItems)

// filterByLastFetch :: ([a], string) => [a]
const filterByLastFetch = (x, y) => x.filter(x => x.last_fetch < y)

export {getCampaigns, batchGetAccessToken, getCampaignsInsights, saveInsights,
        groupUsers,filterByLastFetch, updateCampaignStats, taskOfEvery,
        runTaskWithFn, filterActive, groupAndFilter,
        getItems}
require('pointfree-fantasy')。公开(全局)
从“幻想阅读器”导入阅读器
从“data.Task”导入任务
从“拉姆达”导入
const log=x=>{console.log(x);返回x}
常量ReaderTask=Reader.ReaderT(任务)
//扫描::字符串->[a]
const scan=x=>Reader.ask.map(env=>env.aws.scanAsync({tableName:x}))
//batchGetItems::[a]->[b]
const batchGetItem=x=>Reader.ask.map(env=>env.aws.batchGetItemAsync(x))
//batchWriteItem::[a]->[b]
const batchWriteItem=x=>Reader.ask.map(env=>env.aws.batchWriteItemAsync(x))
//scanCampaigns::null->[a]
const scanCampaigns=()=>scan('CampaignStats')
const FBBatchGetItem=x=>Reader.ask.map(env=>env.fb.batchAsync(x))
const getCampaigns=compose(scanCampaigns,Reader.of)
const groupUsers=\uu.groupBy(x=>x.user\u fbid)
const batchGetAccessToken=chain(batchGetItem,ReaderTask.of)
const getCampaignsInsights=链(FBBatchGetItem,ReaderTask.of)
const saveInsights=chain(batchWriteItem、ReaderTask.of)
const updateCompaignStats=chain(batchWriteItem、ReaderTask.of)
const taskofey=(Task,num)=>compose(map(Task.of),uu.splitEvery(num))
const runTaskWithFn=(fn,task)=>fn(task.fork(err=>err',x=>x))
const filterActive=\.filter(x=>x.active==='true')
常量getItems=x=>x.Items
const groupAndFilter=compose(groupUsers、filterActive、getItems)
//filterByLastFetch::([a],字符串)=>[a]
常量filterByLastFetch=(x,y)=>x.filter(x=>x.last_fetch
目标是只将AWS插件和FBGraph插件传递一次到计算,构建一个优雅的组合,如:

const computation=compose(保存到dynamo3,从Facebook获取,从dynamo2获取,从dynamo获取)

然后:

computation().run({aws:AWSService,FB:FBGraph})