javascript - JavaScript 中的重构模式

标签 javascript node.js functional-programming promise refactoring

我正在编写一个小型应用程序,它与数据库进行通信,我没有使用回调模式,而是使用 Promises 来简化我的代码。完成大量编码后,我现在可以在代码中非常频繁地看到某些模式,我需要知道如何重构它,以便类似的逻辑位于单个位置。

  var queryString = "select * from users u inner join "+
      "(select user_id, count(id) cnt from applications "+
      "where id in (select id from applications where "+
      "created_at > current_date - interval '1 week') "+
      "group by user_id) a on u.id = a.user_id order by a.cnt desc";
  var self = this;
  return new Promise(function _promise(resolve, reject) {
    req.client.query(queryString, [], function result(error, result) {
      req.done(error);

      if (error) {
        console.log('error ' + error.message);
        return reject(error);
      }
      var users = result.rows.map(function(row) {
        return new User(row);
      });
      resolve(users);
    });
  });

上面的模式是我的每个方法,唯一不同的是 if 之后的内容,是否有任何功能方法可以用来重构它?

再添加一个示例:

  var queryString = 'select c.id, c.name, t.contact_user '+
    'from companies c, teams t '+
    'where t.user_id = $1::int and t.company_id = c.id '+
    'limit $2::int';
  var self = this;
  return new Promise(function _promise(resolve, reject) {
    req.client.query( queryString, [self.id, User._RESOURCE_LIMIT],
        function result(error, result) {
      req.done(error);
      if (error) {
        console.log('Error ' + error.message);
        return reject(error);
      }

      self._companies = result.rows.map(function (data) {
        return new Company(data);
      });
      resolve(self);
    });
  });

最佳答案

promise 的“查询”功能

let query = (req, queryString, arg = []) => new Promise((resolve, reject) => {
    req.client.query(queryString, arg, (error, result) => {
        req.done(error);
        if (error) {
            return reject(error);
        }
        resolve(result);
    });
});

用法(按照问题中的示例)

query(req, "select * .... etc")
.then(result => {
    return result.rows.map(function(row) {
        return new User(row);
    });
})
.catch(reason => {
    // error handling goes here
});

关于javascript - JavaScript 中的重构模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42499807/

相关文章:

javascript - 为什么 new Date(undefined) 创建了一个无效日期,而 new Date(null) 却没有?

javascript - 在 OpenUI5 中运行时创建按钮

Node.js & Redis/hget 同步

javascript - 在 RaphaelJS 2 中连接圆对的方法可用吗?

javascript - live 和 delegate 有什么区别

node.js - 找到node.js的css文件

javascript - Grunt - 同时执行和监视应用程序

oop - 如何将 Haskell 类型类转换为 F#?

java - 求一个数的幂

javascript - 使用 Ramda 根据条件更新嵌套值