2011-11-21 135 views
0

我发现使用回调之间的代码分离使得我的代码难以理解和维护。javascript中的异步回调的结构:同步异步

你是如何处理这个问题的?

下面是我提出的几个解决方案,使用它作为一个例外的异步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

异步回调的东西,你将不得不应对网络编程。我认为它只是一个进入思维的案例,最终会被调用。

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

因为我似乎处于为您提供链接而不是像我喜欢的那样完全回答您的问题的习惯。我会把你推荐给对象。我个人发现他们至少在初始阶段更不可读,但是当你得到他们时,你将无法理解你没有。

What are deferred objects?