javascript 中异步回调的结构:同步异步

Posted

技术标签:

【中文标题】javascript 中异步回调的结构:同步异步【英文标题】:Structure of async callbacks in javascript: Synching the Asynch 【发布时间】:2012-01-02 22:40:12 【问题描述】:

我发现使用回调时代码的分离使我的代码更难理解和维护。

你如何处理这个问题?

以下是我提出的几个解决方案,例如使用异步 Web 服务调用。请让我知道您的想法,以及您想到的利弊。

通过闭包:

sayHelloWithClosures: function ()

    //Do something first
    // The following call's signature is: ServiceName(SuccessCallback, FailureCallback);        
    TestBasicWebServices.SL.WebService1.HelloWorld(
    function (result)
    
        //Do something next
        alert(result);
    ,
    function (error)
    
        //Do Exception
        alert(error._message);
    );

通过递归:

sayHello: function (result)

    if (result == undefined)
    
        //Do something first
        // The following call's signature is: ServiceName(SuccessCallback, FailureCallback);
        TestBasicWebServices.SL.WebService1.HelloWorld(this.sayHello, this.sayHello);
    
    else if (typeof (result) == "string")
    
        //Do something next
        alert(result);
    
    else
    
        //Do Exception
        alert(result._message);
    

【问题讨论】:

【参考方案1】:

随着 jquery 的更新版本,所有关于回调的事情都在发生变化。

http://addyosmani.com/blog/jquery-1-7s-callbacks-feature-demystified/

【讨论】:

谢谢!这真的很酷。不幸的是,我看不出它对上述可读性问题有何帮助......【参考方案2】:

异步回调是您在网络编程中必须处理的事情。我认为这只是进入最终会被调用的心态的一个例子。

我不倾向于在现实生活中看到像您的第二个示例那样的代码,所以我会警惕这种方法。你的第一种方法更像是要走的路,但对我来说它看起来有点老派。

因为我似乎习惯于给你链接,而不是像我喜欢的那样完整地回答你的问题。我将向您推荐延迟对象。我个人发现它们至少最初的可读性更差,但是当你得到它们时,你将无法理解没有它们是如何做到的。

What are deferred objects?

【讨论】:

以上是关于javascript 中异步回调的结构:同步异步的主要内容,如果未能解决你的问题,请参考以下文章

进阶学习5:JavaScript异步编程——同步模式异步模式调用栈工作线程消息队列事件循环回调函数

javaScript中的同步,异步与回调函数

node同异步处理

Javascript 默认是同步(阻塞)还是异步(非阻塞)

同步和异步以及回调函数

python_高级进阶同步_异步_回调函数_阻塞