什么是处理jQuery ajax异步调用的最佳方法?

Nar*_*ade 2 ajax jquery design-patterns asynchronous

我最近开始了一个使用大量客户端jQuery / javascripts的项目。我正在努力使其中一个屏幕正常工作。

我有如下功能:

function init{
  populateTypes();
  populateGroups();
  populateStatuses();
  applyCurrentUserSettings();
}
Run Code Online (Sandbox Code Playgroud)

所有populate*方法都会$.ajax对服务器进行ajax调用(),并在视图上添加一些复选框列表。applyCurrentUserSettings方法还会发出ajax请求,并在视图上设置当前用户选择。

问题是populate*方法是异步的,并且由applyCurrentUserSettings方法调用,复选框列表为“有时”为空,apply方法失败。

我可以通过传递得到这个工作async: false$.ajax电话,或链条内的另一个每个Ajax调用,但我想知道,如果有任何更好的方法/设计模式来处理这样的情况。

Yur*_*nko 5

您可以使所有函数返回延迟并使用$.whenhttp://api.jquery.com/jQuery.when/

function populateTypes () {
    //your code
    return $.ajax(...);
}


$.when(populateTypes(), populateGroups(), ...).then(applyCurrentUserSettings);
Run Code Online (Sandbox Code Playgroud)