如何在 Node.js 中使用 Q Promise 重写一系列条件语句?

2023-12-02

exports.create = function(req, res) {
  var company_id = req.company_id;
  var client = new Client(req.body);

  Company.findOne({_id: company_id}, function(err, company) {
    if(err) {
      response = {
        status: 'error',
        error: err
      }

      return res.json(response);
    } else if(!company) {
      response = {
        status: 'error',
        error: 'Invalid company_id'
      }

      return res.json(response);
    } else {
      client.save(function(err) {
        if(err) {
          response = {
            status: 'error',
            error: err
          }
        } else {
          response = {
            status: 'ok',
            client: client
          }
        }

        return res.json(response);
      });
    }
  });
}

这是我的代码(使用Express,如果重要的话)。我正在尝试更多地了解承诺,特别是Q。我觉得这是一种完美的逻辑,可以通过承诺来实现,以避免这种毛茸茸的条件嵌套。但我不知道如何开始?


但我不知道如何开始?

首先删除回调并使用 Promise 方法。然后将错误处理放在专用的错误回调中,而不是使用该条件。另外,您可以放置​​构建该代码response对象在最后(删除重复项),并且只传递/通过err下来。

exports.create = function(req, res) {
  var client = new Client(req.body);

  Q.ninvoke(Company, "findOne", {_id: req.company_id}).then(function(company) {
    if(!company)
      throw 'Invalid company_id';
    else
      return company;
  }).then(function(company) {
    return Q.ninvoke(client, "save");
  }).then(function(saveResult) {
    return {
      status: 'ok',
      client: client
    };
  }, function(err) {
    return {
      status: 'error',
      error: err
    };
  }).done(function(response) {
    res.json(response);
  });
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Node.js 中使用 Q Promise 重写一系列条件语句? 的相关文章

随机推荐

  • Titanium - Android 外部存储 - 创建新目录,然后将文件写入其中

    我们是否不能简单地以编程方式在 Android 的外部 SD 卡 而不是设备的内部存储器 上创建新目录 并且我们不能在 SD 卡上写入文件 Titanium 是否受到如此限制 即使在使用后也始终在内部存储器上写入文件Ti Filesyste
  • 直线与 AABB 矩形相交?

    最好不使用任何类型的循环 因为这将在游戏中使用 我希望将一条线与任意大小的矩形相交 但我也希望返回交点 有可能 我已经做了一些谷歌搜索 但仍然没有解决 该线使用 x1 y1 x2 y2 定义 矩形也有这两点 我建议简单地对构成矩形的每个线段
  • 可变参数模板参数总是必须放在最后吗?

    我是否总是必须将可变参数模板参数放在模板参数的末尾 template
  • 空手道框架 - 如何检查比赛中的条件 OR 包含响应

    作为示例 我尝试使用匹配包含来验证我的架构响应和数据类型 有时它返回 null 有时它会返回字符串 我正在尝试以下操作 但断言失败 因为它的计算结果不为 true 我正在尝试以下操作 match each response data Res
  • 表单中的条件字段

    我需要创建一个 Form 类 该类可能有或没有 ReCaptcha 字段 具体取决于用户是否登录 因为这是一个 CommentForm 所以我无权访问request表单创建 定义上的对象 所以我不能依赖它 For the POST请求解决方
  • 电子邮件触发 PHP 脚本...可能吗?

    我需要根据我控制的电子邮件帐户设置自动回复trigger words在电子邮件正文中 而且 它还需要根据发送到此电子邮件帐户 属于我的网站 的触发词从数据库表中添加 删除行 并且在某些情况下 如果发送到一个论坛 则需要在论坛内创建一个主题
  • 在 Swift 中从 NSString 创建 NSData

    我试图最终拥有一个NSMutableURLRequest具有有效的HTTPBody 但我似乎无法获取我的字符串数据 来自UITextField 转化为可用的NSData object 我见过这种方法可以用另一种方式 NSString dat
  • Facebook 博主的开放图标签 - OG 图像太小。我可以指定全尺寸图像而不是缩略图吗?

    Blogger 不允许您在每个帖子中指定开放图形图像 目前 模板中有一段代码指定自动生成的缩略图作为facebook的开放图图像 问题是 缩略图是 72 72 而 Facebook 现在要求 OG 图像的宽度至少为 200px 否则默认为页
  • Pyinstaller 在 python 3.7 中不起作用(找不到模块“编码”)

    我有下面的测试程序 我用 pyinstaller Python 版本 3 7b Windows 10 64 位 编译代码 在编译和错误期间注意到警告 我将不胜感激任何解决这个问题的见解 Test py import encodings pr
  • 在函数内部创建方法

    我正在尝试在函数内创建方法 我可以这样做 function sample sample show function alert 我会看到警报呼叫sample show 但出于代码美化的原因 我想将所有方法声明移至函数内 我尝试过 funct
  • Python 图像库 - 文本渲染

    我正在尝试使用 PIL 渲染一些文本 但坦率地说 结果很糟糕 例如 这是我在 Photoshop 中编写的一些文本 PIL 的结果是 正如您所看到的 PIL 的结果不太令人满意 也许我只是比较挑剔 但是有没有什么方法可以使用 PIL 绘制文
  • 添加抗锯齿功能

    我正在尝试使用抗锯齿功能 但我不知道为什么它不起作用 Pen pen new Pen Color Black 3 Pen r new Pen Color YellowGreen 3 Graphics b panel2 CreateGraph
  • Angular:路由器、子项(可选)参数

    所以 我希望生成这样的路径 比赛 页面 球队 赛季 其中 team 和 season 是可选参数 所以我可以有一个像这样的网址 matches results 4 2017 or matches results 4 or matches r
  • mysql 使用内连接更新查询

    我有两张桌子顾客和订单 我想用一个查询更新两个表中的不同值 例如 客户表有一个城市列 值为德国 订单表有状态列 值为保留 我想将德国更改为伦敦 并保留通过一个查询来解决 这是下面的查询 UPDATE customer order INNER
  • 将 HTML 和 javascript 代码添加到 R 中的 flexdashboard

    我有以下创建 Flexdashboard 的代码 title Untitled output flexdashboard flex dashboard orientation columns vertical layout fill run
  • 如何在openresty lua中使用内容的第一个字节将tcp请求分派到后端

    我已经启动了一个带有一个 tcp 服务器和两个后端的 openresty tcp服务器根据tcp流的内容将请求分发到后端 以下是 openresty 配置示例 stream define a TCP server listening on
  • chronic 有解析的日期格式选项吗? (红宝石)

    我需要告诉慢性病 日期的格式是日 月 年 这可能吗 我传递给chronic的数据也可以是今天 昨天 2天前的单词 目前慢性病给了我2 Dec 2010代替12 Feb 2010 from 12 02 2010 我能想到的唯一解决方案是在将字
  • Jquery 根据数字内容更改对象的 CSS 类

    将动态输出 0 100 的百分比 想要添加基于百分比的 CSS 类 红色代表 0 蓝色代表 100 标记将是 span class blue 100 span 原本我也有这样的想法 span contains 100 css color 0
  • 使用 unicode 字符创建文件名

    我正在寻找一些有关如何使用 Unicode 字符创建文件名的指南 考虑 use open qw std utf8 use strict use utf8 use warnings use Data Dump use Encode qw en
  • 如何在 Node.js 中使用 Q Promise 重写一系列条件语句?

    exports create function req res var company id req company id var client new Client req body Company findOne id company