改进 AngularJS Simple Factory - PhoneGap 存储 API 的包装器

2023-12-02

我正在尝试用我一般的 JS 技能在 AngularJS 中做一些“好”的事情,我想听听您的感受或改进/重构以下内容:

angular.module('App').factory("SQLService", function ($q) {

    var db = window.openDatabase("FOOD_DATABASE", app.current_version, "FOOD_DATABASE_DN", 5 * 1024 * 1024);

    // public methods
    function getCategories(){
      deferred = $q.defer();

      db.transaction(queryDB, errorCB);

      function queryDB(tx) {
        tx.executeSql('SELECT * FROM CATEGORIES', [], querySelectSuccess, errorCB);
      }

      return deferred.promise;
    }

    function getDishes(){
      deferred = $q.defer();

      db.transaction(queryDB, errorCB);

      function queryDB(tx) {
        tx.executeSql('SELECT * FROM DISHES', [], querySelectSuccess, errorCB);
      }

      return deferred.promise;
    }

    // something like private methods
    function errorCB(err) {
      alert("Error processing SQL: " + err.code);
    }

    function querySelectSuccess(tx, results) {
      var len = results.rows.length;
      var output_results = [];

      for (var i=0; i<len; i++){
        output_results.push(results.rows.item(i));
      }

      deferred.resolve(output_results);

    }

  //expose object with public methods
  return {
    getCategories: getCategories,
    getDishes: getDishes,

  };

});

我不喜欢的第一件事是创建全局deferred = $q.defer();在每个公共函数中,如果我将其声明为本地函数,那么我不知道如何将该延迟对象作为额外参数传递给 querySelectSuccess 回调。或者我应该更好地以某种方式重构一切?你怎么看?


http://rburns.paiges.net/about/回答如下:

function getCategories(){
  return promisedQuery('SELECT * FROM CATEGORIES', defaultResultHandler, defaultErrorHandler);
}

function getDishes(){
  return promisedQuery('SELECT * FROM DISHES', defaultResultHandler, defaultErrorHandler);
}

function defaultResultHandler(deferred) {
  return function(tx, results) {
    var len = results.rows.length;
    var output_results = [];

    for (var i=0; i<len; i++){
      output_results.push(results.rows.item(i));
    }

    deferred.resolve(output_results);  
  }  
}

function defaultErrorHandler(err) {
  alert("Error processing SQL: " + err.code);
}

function promisedQuery(query, successCB, errorCB) {
  var deferred = $q.defer();
  db.transaction(function(tx){
    tx.executeSql(query, [], successCB(deferred), errorCB);      
  }, errorCB);
  return deferred.promise;  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改进 AngularJS Simple Factory - PhoneGap 存储 API 的包装器 的相关文章

随机推荐

  • 在没有工具栏的新进程中启动 Internet Explorer 7

    我需要在 IE 中运行一个 Web 应用程序 因此它至少看起来与独立应用程序类似 我还需要能够在单独的会话中同时运行此 Web 应用程序的多个实例 为了实现这种外观 我希望始终在新进程中启动 Internet Explorer 7 而无需从
  • 使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM

    我花了 2 天的时间来研究 AT T 内联汇编 但是在转换这个汇编时遇到了一些问题 static char vendername 50 0 asm mov eax 0 cpuid mov dword ptr vendername ebx m
  • 如何使用 List 填充 DropDownList

    我有一个下拉列表 我需要用收集到的项目填充它List
  • 使用 SBT,如何指定除当前目录之外的备用项目根目录来运行主类?

    通常 SBT 会在以下位置查找构建文件 build sbt and project Build scala 是否可以指定备用项目根目录 以便我可以构建不在当前工作目录中的项目 我本质上正在寻找相当于mvn f path to pom xml
  • 无法修改 c:\windows 目录中的 .ini 文件

    我正在编写一个 C Windows 应用程序来更新旧应用程序的 ini 文件 我没有旧应用程序的源代码 因此无法对其进行修改 旧版应用程序将设置存储在 C Windows 的 INI 文件中 该位置无法更改 为了修改 INI 设置 我一直在
  • 减少mongodb中的值

    我正在创建一个购物应用程序 每个用户都有钱包 结构如下 userName Gandalf the Grey wallet 100 orderHistory 假设该用户购买了价值 50 件的商品 有没有更好的方法而不是用 findOne 获取
  • g++ 9 概念支持包括 ubuntu 18.04 上的

    我正在使用 g std c 2a fconcepts 来处理 g 的概念 但出现 include Concepts 标头错误 没有这样的文件或目录 有人可以帮我调试这个吗 这是我从 cppreference 复制的代码 include
  • 如何在嵌入式 React 应用程序的页面之间路由?

    背景 我正在尝试在嵌入式 Shopify 应用程序中创建一些链接 我明白我不能使用简单的 a 标签 因为 Shopify 嵌入式应用程序呈现为 iframe 我在本教程中取得了一些进展 但我陷入了困境 https theunlikelyde
  • Rails:在早期开发阶段改变迁移

    在 Rails 应用程序开发的早期阶段 我更喜欢直接修改迁移文件以将新列 字段 添加到我的表 模型 中 而不是堆积迁移来更改字段和 或进行较小的更改 这在 Rails 中可能吗 我运行以下命令来解决这个问题 将其保存在脚本中 然后就可以开始
  • Java时区:为什么需要Offset

    我的要求是这样的 我在数据库和时区中保存以毫秒为单位的时间 例如 以毫秒为单位的时间是1223123123232长时区是Asia Calcutta 我必须将其转换为Africa Asmara时区 long l 1223123123232l
  • 使用之前在 ECIES 中生成的私钥

    我想使用 ECIES 加密 解密数据 我为此使用 cryptopp AutoSeededRandomPool prng get private key generated ECIES
  • 检查图片是否加载?

    我正在寻找一种解决方案 检查所有图像在图像滑块 旋转器中使用之前是否已加载 我正在考虑一种解决方案 仅在加载主图像时显示图像的按钮或缩略图 以防止用户单击尚未完全下载的图像 文字来自 readyjQuery 文档可能有助于区分load an
  • 如何使 .php 扩展名不出现在网站上? [复制]

    这个问题在这里已经有答案了 我的网站使用 PHP 并且 php出现在我的网址中 我怎样才能删除这个 有很多方法可以实现这一点 但它们很大程度上取决于您选择的 Web 服务器 例如 如果您使用的是 Apache HTTPD 您可以使用 多视图
  • 如何从任意 pthread_t 获取线程 ID?

    我有一个 pthread t 我想更改它的 CPU 关联性 问题是我使用的是 glibc 2 3 2 它没有pthread setaffinity np 不过没关系 因为 pthread setaffinity np 本身就是一个包装器sc
  • USACO 项链断裂问题的错误答案 [已关闭]

    Closed 这个问题需要多问focused 目前不接受答案 项链断了 您有一条由 N 个红色 白色或蓝色珠子 3 1 2 1 2 r b b r b r r b r b b b r r b r r r w r b r
  • 使用 MediaElement 播放 Stream 中的视频

    是否可以使用 WPF MediaElement 播放来自 System IO Stream 对象的流视频 正在从存储媒体文件的 WCF 服务中检索 Stream 对象 在任何人浪费时间亲自发现这一点之前 不可能在 WPF 应用程序中托管 S
  • 如何在 Spring Security Bean 中模拟自定义用户服务详细信息以进行单元测试?

    I have Spring Boot启用基本身份验证的应用程序 UserServiceDetails从数据库消耗 出于单元测试的目的 我想模拟它 因此数据将从其他地方消耗 我该怎么做 我的问题不是如何嘲笑UserServiceDetails
  • 使用 PHP 查找 JPEG 分辨率

    呼叫所有 PHP 专家 据我所知 您可以使用 getimagesize 来获取 PHP 中图像的实际像素高度和宽度 但是 如果您在 Photoshop 中打开图像并查看图像尺寸对话框 您会注意到有一个分辨率值决定图像的打印尺寸 给定一个任意
  • WSO2 API 管理器 - 在 UI 中显示正确的 IP

    已在一台计算机上安装了 API 管理器 1 4 0 并让一切运行起来 然而 我们发现管理控制台和商店站点中显示的 IP 地址不正确 例如 在 mgnt 控制台主页中的 主机 和 服务器 URL 也在商店中的 api 页面上 概述中提供了 U
  • 改进 AngularJS Simple Factory - PhoneGap 存储 API 的包装器

    我正在尝试用我一般的 JS 技能在 AngularJS 中做一些 好 的事情 我想听听您的感受或改进 重构以下内容 angular module App factory SQLService function q var db window