2012-11-08 27 views
0

我的应用程序是由一个复杂的数据库架构,其导致我的JavaScript是充满了callback处理外键约束沉重的支持。对于单一行为,例如创建新订单,可能会有多达三个XHR需要提交所有必要的数据进行处理。ExtJS的4.1 - 处理顺序XHR的不使用同步请求

目前,我在我的感觉是一个相当不适度或至少是的,有点草率手段处理这...

/** -- PSEUDO CODE -- */ 
myOrder.save({ 
    success: function() 
    { 
     /** This request handled inserting the main attributes of the model 
      into the database, which means it is safe to fire off additional 
      requests */ 
     myOrderContents.store.sync({ 
       success: function() 
       { 
        /** Possibly fire another request here, that is dependent on 
         the first two requests returning successfully, or maybe 
         execute code that is also dependent on these requests. 
         */ 
       } 
     }); 
    }, 
    failure: function() 
    { 
    /** Handle Failure Here */ 
    } 
}); 

我意识到另一个可行的办法是沿东西线调用一个回调方法,那么这将只执行的代码的某一大块....所有请求

myOrder.save({callback: executeAfterRequests}); 
myOrderContents.store.sync({callback: executeAfterRequests}); 
myOtherObject.save({callback: executeAfterRequests}); 

executeAfterRequests: function() 
{ 
    if(requestA.isComplete() && requestB.isComplete() && requestC.isComplete()) 
    { 
    /** Execute some code after all requests have been completed... */ 
    } 
} 

鉴于ExtJS的开发的强烈反对同步请求,这里是我最好的选择来扩展基类AJAX并实施队列?或者,接受AJAX的本质,并继续以我的快乐方式嵌套success的功能?

谢谢您的输入。

+0

展望未来,实施承诺/ A +将是在一个非常同步状的方式处理异步的理想手段。看起来Promise的目标是早在ES7中内置到DOM中,这将非常棒! –

回答

1

为什么不把所有需要的数据的服务器在一起吗?您可以在服务器上逐步创建记录,并在全部完成时返回。 有一些可以通过屏幕收集数据的漫长过程的窗体向导的例子,但最后提交它的所有内容。

+0

这是我最终选择的方法。承诺是可行的,但我觉得这种用例最好是将整个有效载荷发送到应用服务器进行处理。非常非常抱歉迟到的接受,这一个滑过! –

+1

LOL谢谢接受:) – dbrin

+0

哈哈没问题,特别高兴我看到你的用户档案中的注释后,发现这个;)再次感谢! –

0

是的,我会与队列帮手,你可以把你的功能和包装,并执行它们一个接一个走了。

也许你应该看看可用的工具,看看它们中的一个是否适合你的需要,显然therethemseveral。不幸的是,我认为,他们都没有被接受为标准技术。