哪个控制流程库与谷歌闭包库一起使用?

时间:2012-09-19 21:18:12

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

有几个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”一样存储。 因为没有输入包含范围,所以在高级模式下,闭包编译器将无法一致地重命名它(根据我的理解)。

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

4 个答案:

答案 0 :(得分:1)

您可以使用Closure Library中的goog.async.Deferred吗?它管理异步和同步工作流程。

答案 1 :(得分:0)

通常,您可以使用Closure Compiler高级模式的任何库,方法是为库创建一个extern文件并单独加载代码(或在编译代码后连接库)。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我编写的Closure Library的一个非常小的流控制库是ready.js

根据说明:

  

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

值得一看