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

时间:2011-11-21 12:20:33

标签: javascript web-services asynchronous

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

你如何处理这个问题?

以下是我提出的几个解决方案,使用asynch 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);
    }
}

2 个答案:

答案 0 :(得分:1)

对于较新版本的jquery,关于回调,每件事情都在发生变化。

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

答案 1 :(得分:1)

异步回调是您在Web编程中必须处理的事情。我认为这只是一个进入心态的案例,最终会被称为某种东西。

我不喜欢在现实生活中看到代码,就像你的第二个例子一样,所以我会对这种方法保持警惕。你的第一种方法更像是要走的路,但它对我来说看起来有点老了。

因为我似乎在为你提供链接,而不是像我喜欢的那样完全回答你的问题。我会把你推荐给被破坏的物品。我个人发现它们至少在初期甚至不太可读,但是当你得到它们时,你将无法理解你是如何做到的。

What are deferred objects?