【问题标题】:which control flow library works with google closure library?哪个控制流库与谷歌闭包库一起使用?
【发布时间】:2012-09-19 21:18:11
【问题描述】:

有几个 js 库可用于流控制。

虽然在使用闭包编译器时,我看到的那些在高级模式下不能很好地使用编译器。

是否有任何闭包兼容的流控制库? 我最感兴趣的是等待多个结果,而不会使代码过于复杂。

我想要归档的是减少用户操作的加载时间。 对于用户的一项操作,必须向后端执行多个请求。为了保持代码的可维护性,目前,我一次只做一个请求,并在每一步之后处理潜在的错误。

我想要存档的是,我可以一起触发非依赖请求,而不会使错误处理变得过于复杂。

我喜欢flow js的语法:

var auth = flow.define(
    function(username, password) {

        sys.puts("trying " + username + ", " + password);

        this.password = password;
        keystore.get('userId:' + username, this);

    },function(err, userId) {

        keystore.get('user:' + userId + ':password', this);

    },function(err, passwordInDb) {

        if (passwordInDb == this.password) {
            sys.puts("Authenticated!");
        }
        else {
            sys.puts("Failed Authentication!");
        }
    }
)

它还允许产生多个异步操作并收集它们。 尽管如果您需要回调之间的任何状态,则该状态会像上面的“this.password”一样存储。 由于未键入包含范围,因此在高级模式下,闭包编译器将无法一致地重命名它(据我所知)。

所以我需要一个替代方案,它有一个类型化的容器对象,通过每个函数作为参数(或 this)推送。

【问题讨论】:

  • 您应该添加一些说明:您在说什么样的流量控制?您能举一些不起作用的流控制库示例吗?
  • 谢谢...试图澄清 flow.js 的例子——在比较大小和功能时,这似乎相当不错。

标签: javascript google-closure-compiler google-closure google-closure-library flow-control


【解决方案1】:

你可以使用闭包库中的goog.async.Deferred 吗?它管理异步和同步工作流程。

【讨论】:

    【解决方案2】:

    通常,您可以通过为库创建外部文件并单独加载代码(或在编译代码后连接库)来使用任何具有 Closure Compiler 高级模式的库。

    【讨论】:

    • 是的,但是即使库编译得很好,使用库时生成的代码样式也不会总是在没有复杂性的情况下工作。我添加了一个示例来澄清。
    • 我同意,这种方法在这里没有用处。
    【解决方案3】:

    好的,我找到了解决方案。

    当我创建一个类型化的容器对象并使用 goog.bind 将它传递给每个函数时,它可以工作。

    【讨论】:

      【解决方案4】:

      我为闭包库编写的一个非常小的流控制库是ready.js

      根据描述:

      监视多个异步操作并在全部或部分完成时触发侦听器。

      值得一看

      【讨论】:

        猜你喜欢
        • 2013-04-29
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 2013-12-18
        • 2022-01-06
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多