避免多个ajax请求

2024-02-02

我试图避免向工厂中的服务器发出多个 ajax 请求。我已经添加了一个小型缓存服务,但这还不足以实现我的目标:在服务器响应之前可以多次调用该工厂,从而导致向服务器生成多个请求。

为了避免这种情况,我添加了第二个 Promise 对象,如果 AJAX 请求已执行并且该对象尚未在缓存中,则它应该等待第二个 Promise 得到解析,但看起来我错过了一些东西。

这是我的代码:

myApp.factory('User', ['Restangular', '$q',
  function (Restangular, $q) {
    var userCache, alreadyRun = false;
    return {
      getUser: function () {
        var deferred = $q.defer(), firstRun= $q.defer();

        if (!userCache && !alreadyRun) {
          alreadyRun = true;

          Restangular.all('user').getList().then(function (user) {
            console.log('getting user live ');
            userCache = user[0].email;
            firstRun.resolve(user[0].email);
          });
        } else if (!userCache && alreadyRun) {
          console.log('waiting for the first promise to be resolved ');
          firstRun.then(function(user) {
            console.log('resolving the promise');
            deferred.resolve(userCache);
          });

        } else {
          console.log('resolving the promise from the cache');
          deferred.resolve(userCache)
        }
        return deferred.promise;
      }
    };
  }
]);

如果已经提出请求,您只需返回原始承诺即可。像这样的东西应该有效;

myApp.factory('User', ['Restangular', '$q',
  function (Restangular, $q) {
    var deferred = false;

    return {
      getUser: function () {

        if(deferred) {
          return deferred.promise;
        }

        deferred = $q.defer();

        Restangular.all('user').getList().then(function (user) {
          deferred.resolve(user[0].email);
        });

        return deferred.promise;
      }
    };
  }
]);

还可以看看用于缓存请求的 Restangular 文档 https://github.com/mgonto/restangular#can-i-cache-requests

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免多个ajax请求 的相关文章

  • 角度模拟“模块”导致“[对象对象]不是函数”

    我正在尝试使用通过 Teaspoon 运行的 Jasmine 在 Angular 中创建一些单元测试 测试正在运行 但是我有一个简单的测试只是为了测试失败的控制器是否存在 我有以下测试设置 require spec helper requi
  • 如何将除 Web API 之外的所有内容路由到 /index.html

    我一直在研究一个AngularJS项目 在 ASP NET MVC 内部使用 Web API 除非您尝试直接访问有角度的路由 URL 或刷新页面 否则它效果很好 我认为这将是我可以处理的事情 而不是胡闹服务器配置MVC的路由引擎 当前的We
  • AngularJS 和 Laravel - 跨域 CORS / XHR 请求缺少(记住)cookie

    当我不使用 Chrome 中的 disable web security 选项时 我的 CORS XHR 请求在请求标头中缺少 Remember xyz cookie 如果我启用该选项 remember xyz cookie 将包含在请求标
  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • 在 angularjs 中的某些字段上设置条件焦点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 您好 所有工程师同事 我看到了很多问题 并提出了关于将焦点设置在某些输入字段上的答案 但我没有找到任何可以满足我的要求的
  • Google 地图第二次无法加载 - AngularJS

    我正在使用 GoogleMap API angular google maps js 包 并且我有一个非常奇怪的行为 The first time I load it i get the full map loaded like here
  • 路线过渡之间滑动 AngularJS

    我只使用 Angular 大约一周时间 所以如果我的代码很糟糕 我深表歉意 我正在尝试在路线转换之间创建滑动操作 我可以在幻灯片中创建效果 但不能在路线转换之间创建效果 无论如何 代码如下 导航 li a class intro curre
  • Angular JS,量角器定位器,获取元素的直接子元素

    我有一个网格 我想从中选择所有行 但不选择行内的任何元素 这些行只是 div 没有类等 类似这样 为简洁起见 删除了内部内容 div class grid div div div div div div div div div div di
  • 以编程方式在指令内添加指令

    我想将指令的另一个实例附加到父指令中 但我无法使用 apply 重新编译我的指令 我想我在某个地方错过了一些东西 我的 HTML 代码 div div div div
  • AngularJS:选择非 2 路绑定到模型

    我正在使用选择来显示客户名称 用户应该能够选择现有客户端 然后更新范围属性 控制器 初始化 首选 if scope clients length gt 0 scope existingClient scope clients 0 View
  • 无法启动 Angular-phonecat,安装后脚本失败[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我目前正在设置一个 vagrant box 来开始开发实验性的 node js angularjs 应用程序 由于我刚刚开始使用
  • TinyMCE 脏标志未设置或在编辑器离开后自动重置?

    配置 TinyMce 编辑器和一些功能后 如果用户进行了更改但没有保存 我现在想警告用户 为此 我正在检查 Blur 的脏标志 但它总是被设定的false 控制器 js this scope tinymceOptions selector
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 如何让 Angular-Flask 应用加载 html 部分?

    我试图让我的 Angular Flask 应用程序在基本 html 文件中渲染部分 HTML 文件 应用程序加载基本 html 窗口标题和页脚加载 但 ng view 没有加载任何内容 也许我到局部的角度路由不正确 文件结构 gt flas
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • Angular 1.6 和多个模块:在模块和组件之间共享全局变量

    我正在使用 Angular 1 6 7 我在我的应用程序中创建了多个模块 如何将父模块 myApp 中定义的常量 例如 rootURL 传递给子模块 childApp 更具体地说 我需要将 rootURL 的值分配给 childApp 组件
  • AngularJS:在部分视图出现之前触发 $viewContentLoaded

    对于部分视图 我想做一些我通常会做的 JavaScript 事情 document ready function 例如将 venet 侦听器绑定到元素 我知道这对于 AngularJS 和加载到 根 视图中的部分视图不起作用 因此 我向控制
  • AngularJS with Grunt - 连接到另一台服务器

    我使用 grunt bower 和 yeoman 创建了一个 AngularJS 应用程序 我猜想 Gruntfile js 在 2014 年 1 月之后发生了变化 不确定 这是我的gruntfile js Generated on 201
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • Rails 3 + angularjs + 缩小在生产中不起作用:未知提供者:eProvider

    我已遵循我能找到的所有修复缩小的说明 例如 var MyController function renamed scope renamedGreeter MyController inject scope greeter and someM

随机推荐

  • 如何将 Postman 集成测试与 TeamCity 集成

    我正在 Postman 中构建一套集成测试来测试一些 RESTful API 我想在 TeamCity 中构建项目时运行这些测试 我正在考虑使用纽曼命令行集成 但我没有找到很好的例子 谁能建议一种方法来实现这一点 我能够使用 newman
  • 以编程方式关闭特定包的 java.util.logging

    我正在使用一个 SDK 它使用阿帕奇CXF http cxf apache org 内部 Apache CXF 使用java util logging默认情况下用于日志记录的包 我想更改日志记录级别INFO to WARNING或完全关闭它
  • 使用 chai-http 和 Jest 进行测试时,如何从 api 返回响应

    我正在尝试使用下面的代码测试我的节点 api 索引端点 索引 test js const chai require chai const chaiHttp require chai http const server http localh
  • Java 异常 - 线程“main”中的异常 java.lang.NoClassDefFoundError: net/sourceforge/tess4 j/Tesseract

    我试图让事情与 tess4j OCR 算法 一起工作 并且我使用以下代码 import java awt image RenderedImage import java io File import java net URL import
  • 复制 .docx 并保留图像

    我正在尝试将文档的元素从一个文档文件复制到另一个文档文件 文本部分很简单 图像是棘手的地方 附加图像来解释文档的结构 只有一些文本和 1 张图像 from docx import Document import io doc Documen
  • Xcode:如何将 MP4 文件转换为音频文件

    我想将应用程序文档文件夹中的 MP4 文件转换为音频文件 mp3 或 m4a 我已经尝试过 但无法使用 AVPlayer 播放转换后的 MP3 文件 这是我的代码 void convertMP4toMP3withFile NSString
  • Android 中的 Google 地图上的标记闪烁

    我刚刚开始Android应用程序开发 按照本教程开发了Google地图应用程序并在Google地图上添加了标记 http mobiforge com developing story using google maps android ht
  • 获取用户头像大小的照片

    我正在使用 C 开发 Facebook 网站应用程序 我可以使用以下方式获取信息 FacebookClient FBApp new FacebookClient getAccessToken dynamic user FBApp Get m
  • g++编译错误

    我是 Ubuntu 的新手 我尝试编写一个简单的 Hello World Ubuntu 11 04 中的 c 代码 该代码 在终端中 gcc Wall W Werror tex cpp o tex 但编译器返回了很多错误 tmp ccL8c
  • 用于本地化的流畅 NHibernate 映射

    我正在尝试从 NHibernate 映射构建数据库 但遇到了问题 我有许多具有本地化字符串值的类 public class MyClass1 public virtual int Id get set public virtual Shor
  • 如何创建私有类方法?

    这种创建私有类方法的方法是如何工作的 class Person def self get name persons name end class lt lt self private def persons name Sam end end
  • Dart 异常:已经为元素 x 注册了(聚合物)原型

    我有两个共享相同飞镖文件的聚合物元件 在 dart 文件中 我声明了两个 PolymerElement 类 直到聚合物 0 15 0 1 都工作正常 我已将项目更新为聚合物 0 15 1 现在出现此异常 Exception Already
  • 函数参数过多

    我从我的头文件中收到此错误 too many arguments to function void printCandidateReport 我对 C 相当陌生 只需要一些正确方向的指导来解决此错误 我的头文件如下所示 ifndef CAN
  • 如何在`Axios.interceptors.request`的配置中获取Cookies的`csrftoken`?

    我怎样才能得到饼干csrftoken in Axios interceptors request的配置 Axios interceptors request use config gt if config method post confi
  • 使用 GWT 编译器将 Java 转换为 JavaScript

    我写了一些 Java 代码 想将其转换为 JavaScript 我想知道是否可以使用GWT编译器将提到的Java代码编译为JavaScript代码保留所有名字方法 变量和参数 我尝试使用 draftCompile 关闭代码优化来编译它 但方
  • 以明文显示的 IIS 应用程序池身份帐户密码

    当我使用appcmd list apppool
  • 删除时触发将行插入到另一个表中

    我正在尝试创建一个触发器 它将包含所有列的行插入到另一个表中 这是我到目前为止所得到的 但它不起作用 delimiter CREATE TRIGGER item deleted move AFTER DELETE ON item begin
  • 在php中将时间戳转换为之前的时间?

    我知道这个问题已经被问过好几次了 我发现了很多关于在 php 中将时间戳转换为之前时间的教程 博客文章 我尝试了无数的代码 但似乎没有什么对我有用 我要么得到一个没有错误的空白页面 我的 php 页面上重新发布时出错 要么在我的页面中得到一
  • 如何在 Flutter 上使用 SignalR?

    我正在尝试与使用 SignalR 建立聊天通信的 Asp Net core 2 1 应用程序进行通信 但我无法弄清楚使用 flutter 实现这一目标的最佳方法是什么 我已经搜索了一些库来做到这一点 但我发现的库与 Flutter 不兼容
  • 避免多个ajax请求

    我试图避免向工厂中的服务器发出多个 ajax 请求 我已经添加了一个小型缓存服务 但这还不足以实现我的目标 在服务器响应之前可以多次调用该工厂 从而导致向服务器生成多个请求 为了避免这种情况 我添加了第二个 Promise 对象 如果 AJ