繁体   English   中英

如何在Javascript中重用函数链?

[英]How can I reuse function chains in Javascript?

我正在使用函数库( Gremlin )来查询图形数据库。 调用它看起来像这样:

g.V().has(...).out(...).hasLabel(...).in(...).next();

我的一些功能链非常长,我希望能够将它们的一部分用于干燥目的。 例如:

const postProjection = () => (
  project("id", "title")
  .by(__.id())
  .by("title")
)

g.V().hasLabel("post").postProjection().next()

我知道这不起作用但这就是概念。 我想将这个链的一部分封装到一个函数中,我可以(以某种方式)从需要的库中注入各种其他函数链。 通过使用可重用段动态构建这些调用,我可以大大减少重复次数。

这可能吗?

如果你想用你的确切语法来调用它,你必须使用类似这样的答案将函数添加到Vertex (或其他)原型。 但是,这有点冗长,而不是解决类似问题的预期方法。 我建议将它作为常规函数调用,除了需要参数之外,现有的解决方案非常接近:

const postProjection = (vs) => (
  vs
  .project("id", "title")
  .by(__.id())
  .by("title")
)

const vs = g.V().hasLabel("post")
postProjection(vs).next()

也许你可以使用一个实现functor的类型,并允许你调用内部对象的方法:

 const foo = i => (console.log(i), {foo, i}); const Box = o => ({ map: f => Box(f(o)), run: (k, ...args) => Box(o[k] (...args)), get: o }); const fun1 = o => o.foo(3).foo(4) const fun2 = o => o.foo(7).foo(8); console.log( Box(foo(1).foo(2)) .map(fun1) // lift normal function into the type .run("foo", 5) .run("foo", 6) .map(fun2) .run("foo", 9) .get // escape from the type .foo(10)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM