当前位置: 首页 > 面试题库 >

具有多个依赖项的jQuery ajax调用链

通京
2023-03-14
问题内容

我不太了解jQuery的魔术延迟对象。假设以下代码:

function callWebService(uri, filter, callback)
{
  var data = {};

  if (filter && filter != '')
    data['$filter'] = filter;

  jQuery.ajax({
    url: '/_api/lists/' + uri + '/items',
    data: data,
    success: callback,
    dataType: 'json'
  });
}

function getInitialData() {
  callWebService("InitialData", "", function (data) {
    //do stuff with data
  });
}

function getGreenData() {
  callWebService("GreenData", "filter from InitialData", function (data) {
    //do stuff with data
  });
}

function getRedData() {
  callWebService("RedData", "filter from InitialData", function (data) {
    //do stuff with data
  });
}

function getFinalData() {
  callWebService("FinalData", "filter from RedData & GreenData", function (data) {
    //do stuff with data
  });
}

我要执行的操作的顺序是这样的-最后,我将调用四个Web服务,而调用彼此依赖(一个长链):

  1. 呼叫 getInitialData
  2. getGreenData依存呼叫getInitialData
  3. getRedData依存呼叫getInitialData
  4. 调用getFinalData依赖于getGreenDatagetRedData

如您所知2和3可能同时发生。我想我可以使用jQuery.when()(或resolve?),我只是不知道如何在这里应用它。我想我需要重新编写功能以始终返回ajax对象?

伪代码如下所示:

getInitialData().then(getGreenData, getRedData).then(getFinalData)

问题答案:

$ .ajax返回jQuery承诺。然后then,您可以调用该诺言将完成链接到一个函数。该ajax
data作为promise参数传递给任何最终的回调函数。这是因为$ .ajax“承诺返回Ajax数据”。

如果对所有功能都遵循相同的模式,则可以根据需要链接所有内容。通过不调用函数或添加匿名回调,它仅使用每个函数调用产生的承诺并将它们组合在一起。

就像是:

function CallWebService (uri, filter)
{
  var data = {};

  if (filter && filter != '')
    data['$filter'] = filter;

  return jQuery.ajax({
    url: '/_api/lists/' + uri + '/items',
    data: data,
    dataType: 'json'
  });
}

function getGreenData() {
  return CallWebService("GreenData", "filter from InitialData");
}

function getRedData() {
  return CallWebService("RedData", "filter from InitialData");
}

function GetInitialData() {
    return CallWebService("InitialData", "").then(GetGreenData);
}

// Fetch green data then red data sequentially
function GetFinalData () {
    return getGreenData().then(getRedData);
}

// Call the final one
GetFinalData().done(function(greendata, reddata){
     Alert("all done!");
});

要并行运行promise,请立即评估函数,并将结果promise与结合使用$.when

例如

// Fetch green data and red data in parallel
function GetFinalData () {
    return $.when(getGreenData(), getRedData());
}


 类似资料:
  • 问题内容: 这是我目前拥有的并且可以正常工作: 现在,我想添加另一个依赖项。我将其更改为: 但是现在我收到此错误消息: FragmentFacebookLoginComponent依赖于多个作用域组件 我该如何解决?我如何有多个依赖关系? 如果我从一个组件中删除范围,则会收到此错误消息: AnotherComponent(无作用域)不能依赖范围内的组件 问题答案: 最后,我创建了一个具有正确范围的

  • 我已经在NetBeans8.1中创建了5个不同的Java SE项目。我想创建一个新的项目,该项目带有一个介绍窗口,该窗口带有链接/打开链接到该按钮的项目的按钮,并从该窗口创建一个软件。 我已经在主项目->Properties->Library->Compile->Add Project中添加了依赖项(其他项目的jar文件)。 当我在netbeans中运行它们时,运行窗口打开了,但是当我从主项目中调

  • 我试图用Maven做一个小程序。我使用的是来自我大学教授的模板,我想使用log4j进行日志记录。当我在eclipse中运行该程序时,它工作得很好。然而,当我用“MVN install”创建jar并尝试用cmd运行程序时,我得到的是一个NoClassDefFoundError 我在这里还发现了这一点:NoClassDefFoundError在Maven依赖上,我尝试使用maven-shade-plu

  • 我有一个多模块Maven项目,有模块“app”和“域”。应用依赖于域。域模块有公共和私有代码。公共代码在包中。 在Domain模块的pom中,我添加了maven jar插件的执行,该插件使用分类器“api”(仅包含公共类)生成一个额外的项目工件。 在应用程序模块中,我在域模块上添加了一个“运行时”范围的依赖项(因此所有类都存在于运行时),并在分类的“API”上添加了编译时范围的依赖。这是为了确保应

  • Java和Maven新手。 我试图配置我的应用程序,以便我可以通过cmd线生成一个jar,其中包含我所有的依赖项。 据我所知,我正在正确设置Pom以使用此插件:https://github.com/javafx-maven-plugin/javafx-maven-plugin 以下是我在Pom中的依赖项: 在我的

  • 我正在为jboss ear应用程序编写一个EJB jar模块。我使用的是gradle,我不想试图从JBoss声明jar在运行时依赖的所有不同依赖项。是否有一种方法可以声明对目录树中所有文件的依赖关系。