异步瀑布相当于 Q

2024-01-22

我有一个页面,它是帐户设置页面。在其中,我允许我的用户更新他们的头像(如果他们附加了图像)、更改他们的电子邮件(如果已更改为原始电子邮件)以及更改他们的名称和密码。

现在,我正在使用异步waterfall方法,但我将 async 替换为 Q,因为我更喜欢语法(和 api)。我想知道这是否是我应该使用 Q 来代替异步瀑布的方式。

我正在做这样的事情:

exports.settingsAccountPOST = function(req, res) {
  var doesEmailExist = function() {
    var deferred = Q.defer();

    User.findByEmail({
      email: req.body.email
    }, function(err, user) {
      if (err) {
        deferred.reject(err);
      } else {
        deferred.resolve(user);
      }
    });
    return deferred.promise;
  };

  var updateEmail = function(email) {
    var deferred = Q.defer();

    User.updateEmail({
      userId : req.session.user.id,
      email : req.body.email
    }, function(err, updated) {
      if (err) {
        deferred.reject(err);
      } else {
        deferred.resolve(updated);
      }
    });
    return deferred.promise;
  };

  var updateName = function() {
    var deferred = Q.defer();

    if (req.body.name) {
      User.updateName({
        userId: req.session.user.id,
        name: req.body.name
      }, function(err, updated) {
        if (err) {
          deferred.reject(err);
        } else {
          deferred.resolve(updated);
        }
      });
      return deferred.promise;
    }
  };

  doesEmailExist().then(function(email) {
    if (!email) {
      return(updateEmail(email));
    }
  }).then(function() {
    return(updateName())
  }).then(function() {
    res.redirect('/account')
  });
};

假设使用的电子邮件地址有错误。有没有办法将其“传递”到最终调用?使用案例:正确更新密码,但电子邮件更新不起作用,因此我想向用户显示会话闪存,告诉他们他们已正确更新密码,但更新电子邮件时出现问题。

我正在查看文档,似乎我可能需要使用:

.fin(function () {
});

它是否正确?如果是这样,我应该传递什么?只需将链中发生的错误推送到对象,然后循环所有错误并将其显示给用户?或者直接返回并显示错误?


如果您正在使用Q.defer你通常做错了什么。

var findByEmail = Q.nbind(User.findByEmail, User);
var updateEmail = Q.nbind(User.updateEmail, User);
var updateName = Q.nbind(User.updateName, User);

//later on...

exports.settingsAccountPOST = function (req, res) {
    findByEmail({
        email: req.body.email
    })
    .then(function (user) {
        if (!user) {
            return updateEmail({
                userId: req.session.user.id,
                email: req.body.email
            });
        }
    })
    .then(function () {
        return updateName({
            userId: req.session.user.id,
            name: req.body.name
        })
    })
    .then(function () {
        res.redirect("/account");
    })
    .catch(function(e){
        //Handle any error
    });
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步瀑布相当于 Q 的相关文章

  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 如何使弹出窗口出现在我的鼠标进入悬停目标的位置?

    这是一个示例代码 用于显示我的按钮下方的弹出窗口 fn popover defaults extend fn tooltip defaults placement bottom content 现在我希望弹出窗口出现在光标移动的位置 不仅是
  • 如何在react-select v2中创建optgroup?

    我想在我的反应选择列表中包含 optgroups 但它似乎没有记录在任何地方 我有以下结构 是从评论中提取的https github com JedWatson react select issues 59 https github com
  • Sails.js - 如何更新嵌套模型

    attributes username type email validated by the ORM required true password type string required true profile firstname s
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • JavaScript 原型 - 请澄清

    有人可以帮我理解原型属性吗 我不明白原型属性是函数的属性还是函数内部的属性 假设我们创建以下构造函数 Food 此时 函数 Food 具有 Food prototype 属性 由于 Food 是 Object 的实例 因此这意味着 Obec
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

    自 2012 年 6 月 12 日 11 20 TU 起 我在我的 varnish apache 日志中看到非常奇怪的错误 有时 当用户请求一页时 几秒钟后我会看到类似的请求 但 url 中最后一个 之后的所有字符串已被 未定义 替换 例子
  • 很奇怪!调用 window.location 或 location.replace 会重定向到该页面,然后再次返回!

    我处于调试模式 因此我可以看到正在访问哪个页面 当我打电话时window location or window location replace 它会转到该页面 然后返回原始页面 怎么会这样 解决方案是添加 window location
  • 当表格在 IE 中获得焦点时,表格滚动条会向上跳跃

    问题 我有一个table有包装的div with overflow y auto 一旦table获得焦点 滚动条向上跳 我怎样才能防止这种情况发生 我经历过这种行为IE9 不在 Chrome 中 请注意 我已添加tabindex到桌子上 以
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • 将 CollectionView Item VisualElement 的 VisualState 传递给其子 VisualElements

    我遇到以下情况 CollectionView 每一项都是Border 包含其他控件 选择后 边框的 VisualState 更改为已选择 然而 子控件的状态没有改变 有没有一种简单的方法可以将这些 VisualStates 链接 传递给所有
  • 使用递推方程的程序的时间复杂度

    我想使用递归方程找出程序的时间复杂度 那是 int f int x if x lt 1 return 1 else return f x 1 g x int g int x if x lt 2 return 1 else return f
  • 如何在 AntD Reactjs 中打开表格行按钮上的模态并访问模态中的表格数据

    我在 antd 表中显示用户数据 并在表中为每行创建了编辑按钮来访问每行记录 我想在 编辑 按钮单击时打开模态并在模态中获取相应的行数据 但无法 因为它给出了错误 showModal 未定义 版本 antd 4 18 9 axios 0 2
  • 在IOS中使用Web服务时出现NSURLSession内存泄漏

    我正在构建一个使用 Web 服务的应用程序 并从我使用的 Web 服务中获取信息NSURLSession and NSURLSessionDataTask 我现在处于内存测试阶段 我发现NSURLSession正在导致内存泄漏 这还不是所有
  • 使用 htaccess 文件删除文件扩展名 .php

    我想通过 htaccess 文件从 url 中删除 php 例如 home php 到 home 我在 htaccess 文件中使用以下重写规则 RewriteRule 1 php L 我还想将登录名指定为索引 我该如何改变它 这是可用于隐
  • 如何通过ajax使用Materialize自动完成插件?

    我正在努力共同努力MaterializeCSS 自动完成插件 http materializecss com forms html autocomplete使用我的 ajax 调用 以便根据输入字段中键入的内容动态加载数据 我的 ajax
  • 如何在 NumericUpDown 中保留有效值而不是分配最大值?

    假设我有 NumericUpDownMaximum 99 and Minimum 99和初始值 23 如果用户将焦点设置到此控件并输入1 那将是123现在 它改变了它的价值99 我该如何保留23而不是将值更改为允许的最大值 我尝试捕获 Ke
  • 什么是缓动函数?

    动画上下文中的缓动功能是什么意思 看来dojo jquery silverlight flex等UI系统都有缓动功能的概念 我找不到缓动函数的良好解释 任何人都可以解释缓动函数的概念 或者对它们给出一个很好的解释 我对这个概念感兴趣 而不是
  • 如何将 android.support.v7.* (appcompat) 导入到 AIDE

    任何人都知道如何将 android 支持导入 AIDE 编译器应用程序 经过大量时间的搜索并在 Alan Downie 的帮助下 感谢你 这里是使用 AppCompatActivity 与支持库版本 27 的说明 使用最新的支持库非常重要
  • 如何在 php 中反转数组而不使用数组反转方法

    我想知道如何在不使用 array reverse 方法的情况下反转数组 我有一个名为反向数组的数组 这是我想要反转的数组 我的代码如下 有人可以指出我做错了什么 因为我在其他地方找不到任何以这种方式反转数组的示例 我的代码如下
  • C 中的字符串分割器 - 它是如何工作的?

    我继承了一个庞大的代码库 并且有一个实用函数可以分割字符串 字符 我了解大约 80 的运作方式 但我不明白 token 0 line 任何指点都将受到高度赞赏 include
  • tomcat websocket servlet监听端口

    我正在尝试编写一个使用的 servletorg apache catalina websocket WebSocketServlet 我找到了一个 websocket 聊天的示例 但我不知道如何指定 websocket 服务器的侦听端口 在
  • 如何隐藏 TVirtualStringTree 节点?

    如果我没记错的话 在一个节点中不可能有不可见的节点 TVirtualStringTree 树视图 因为没有启用 可见或其他 属性来这样做 我的说法正确吗 如果是 我如何设法拥有不可见的节点 我的树的结构 One Node Another n
  • Android:如何获取当前主题的资源ID?

    在 Android 中 您可以获取 Activity 的当前主题Resource Theme对象来自getTheme 另外 您可以通过其他主题的资源 ID 将主题设置为不同的主题 如下所示setTheme R style Theme MyT
  • 无法从tensorflow.keras.metrics导入指标

    我想编写一个我正在关注的自定义指标评估器这个链接 https www tensorflow org beta guide keras training and evaluation specifying a loss metrics and
  • Django runserver 在开发中不提供静态文件

    我正在使用 Djangorunserver为了我的发展 当我部署到生产服务器时 我可以看到所有静态文件 但看不到本地计算机上的文件 I did collectstatic我已经设置了DEBUG True 我在网上找到了很多不同的意见 其中最
  • mpi 中的 darray 和 subarray 有什么区别?

    我有一个用于并行编程类的并行 I O 项目 并且我必须实现派生数据类型 我不太清楚darray和subarray之间的区别 darray 是否可以从动态分配的数组派生 主要区别是什么 子数组可让您描述较大多维数组的单个块 切片 如果每个 M
  • 使用“Microsoft Print to PDF”和 Java 将文档转换为 PDF

    我目前正在 Microsoft Windows 主机上测试将 RTF DOC 文档转换为 PDF 我有一段使用 Microsoft Word API 的工作和平代码 但由于许可证成本 我想摆脱它 我的想法是 只需将 RTF 发送 到 Mic
  • 如何删除git中未暂存的更改[换行符差异]?

    这很令人沮丧 我根本找不到如何处理这个问题的正确答案 我正在执行变基操作 但这只是发生此问题的众多场景之一 并且我有大量 已更改但未更新 的文件 除了换行符之外没有任何区别 git diff b 什么也没有返回 现在我只想删除更改并将文件保
  • 异步瀑布相当于 Q

    我有一个页面 它是帐户设置页面 在其中 我允许我的用户更新他们的头像 如果他们附加了图像 更改他们的电子邮件 如果已更改为原始电子邮件 以及更改他们的名称和密码 现在 我正在使用异步waterfall方法 但我将 async 替换为 Q 因