使用AcornJS中的同步回调处理程序远离全局状态

时间:2018-02-16 22:49:27

标签: javascript events callback functional-programming

我正在使用AcornJS并试图远离全局变量。我正在寻找一个功能范例,它允许我从types.visit函数VID函数VCE[type, path]中累积来自两个处理程序的数据。我在下面设法将它们解析为单个函数,但我真正需要的是在发现它们时积累这些值。我试图在没有声明的全局变量的情况下完成所有这些操作。是否可以让函数返回许多const VID = 'visitImportDeclaration' const VCE = 'visitCallExpression' const acornVisitCb = (type) => (path) => [type, path] const getTypesAndPaths = (acornAst) => types.visit(acornAst,{ [VID]: acornVisitCb(VID), [VCE]: acornVisitCb(VCE) }) 组合的数组?

results

如果有帮助,这种情况是同步的。

这是一个工作的例子,但是有定义的状态'结果'。这可以在没有function getTypesAndPaths = (acornAst) => { const results = [] types.visit(acornAst, { [VID]: (path) => results.push([VID, path]) [VCE]: (path) => results.push([VCE, path]) }) return results } 的情况下完成吗?

{{1}}

1 个答案:

答案 0 :(得分:0)

const {chain} = lodash
const VID = 'visitImportDeclaration'
const VCE = 'visitCallExpression'
const cbPush = (arr, ...top) => (...bot) => arr.push([...top, ...bot])
const getVisitations = (acornPaths) => ({[VID]: cbPush(acornPaths, VID), [VCE]: cbPush(acornPaths, VID)})
const getAcornPaths = (acornAst, acornPaths) => types.visit(acornAst, getVisitations(acornPaths))
const getDependenciesFromAcornAst = (acornAst, acornPaths) => chain(getAcornPaths(acornAst, acornPaths)).thru(() => acornPaths).value()