【问题标题】:Async table query in sequelize getter methodsequelize getter 方法中的异步表查询
【发布时间】:2016-12-02 19:35:45
【问题描述】:

我有一个执行数据库查询的 sequelize 实例方法:

getPropertyDays() {
    const queryString = `
      SELECT
        state
      FROM property_days
      WHERE
        DATE(day) = CURDATE() AND
        property_id = :propertyId;`;

    const replacements = {propertyId: this.id};
    return this.sequelize.query(queryString, {replacements: replacements, type: sequelize.QueryTypes.SELECT});
  },

被 getter 调用:

getterMethods: {
  propertyState() {
    var self = this;
    const blockedDay = 'x';
    const unavailableDay = 'u';

    this.getPropertyDays().then(function(result) {
      var state = result[0]['state'];

      if (self.prospect || state == unavailableDay) {
        return 'unavailable';
      }
      if (state == blockedDay) {
        return 'occupied';
      }
      else {
        return 'available';
      }
    });
  }
},

问题是从 getter 返回的结果是未定义的,因为他无法在返回之前解决 promise。

由于我没有桌子的模型,我该如何解决这个问题?已经玩了一天了!

非常感谢。

【问题讨论】:

    标签: node.js asynchronous promise sequelize.js getter


    【解决方案1】:

    不会返回从this.getPropertyDays 返回的承诺吗?

    getterMethods: {
      propertyState() {
        var self = this;
        const blockedDay = 'x';
        const unavailableDay = 'u';
    
        return this.getPropertyDays().then(function(result) {
          var state = result[0]['state'];
    
          if (self.prospect || state == unavailableDay) {
            return 'unavailable';
          }
          if (state == blockedDay) {
            return 'occupied';
          }
          else {
            return 'available';
          }
        });
      }
    },
    

    【讨论】:

    • 不是我的实验。例如,模型的 toJSON 将输出 promise 的属性与 promise 的解析值,这并不是很有帮助。
    猜你喜欢
    • 2014-08-19
    • 1970-01-01
    • 2017-03-23
    • 2013-10-07
    • 2018-11-11
    • 2016-07-10
    • 2021-07-07
    • 2017-02-17
    • 2023-04-08
    相关资源
    最近更新 更多