2

有几个 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)推送。

4

4 回答 4

1

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

于 2012-11-19T04:54:03.753 回答
0

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

根据描述:

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

值得一看

于 2013-01-21T11:13:49.883 回答
0

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

于 2012-09-19T21:36:57.517 回答
0

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

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

于 2012-09-19T21:52:52.407 回答