【问题标题】:cannot call method 'then' on undefined sequelize error无法在未定义的续集错误上调用方法“then”
【发布时间】:2017-06-06 03:35:28
【问题描述】:

我在函数内返回一个承诺,并在函数外处理承诺,但我无法在未定义的错误上调用方法“then”。有人可以指出我做错了什么或如何解决这个问题。

function getMeterReadingByMeterIdandDate(sequelize, Dials, Meter, Server, meter_id, date){
   getNameByMeterId(sequelize, Meter, meter_id)
  .then(function(meter){
    getServerIdByMeterId(sequelize, Server, meter_id)
    .then(function(server){
      var name = meter[0].meter_id;
      var channel = "Ch"+name.substr(-1);
      var serialNumber = parseInt(name.substr(0,12));
      console.log({name:name,channel:channel,serialNumber:serialNumber});
      var server_id = server[0].server_id;
      return sequelize.query("select SUM(?) as total from dial?s where RealReadDate <= ? and SN = ?",
      {
        model:Dials[server_id],
        replacements:[channel, server_id, date.toISOString(), serialNumber],
        type: sequelize.QueryTypes.SELECT
      });
    });
  });
}


function getStartMeterReadingByMeterIdAndBillingId(sequelize, Dials, Billings, Meter, Server, meter_id, billing_id){
   getStartDateByBillingId(sequelize,Billings,billing_id)
  .then(function(date){
    return getMeterReadingByMeterIdandDate(sequelize, Dials, Meter, Server, meter_id, date[0].start_date);
  });
}

 getStartMeterReadingByMeterIdAndBillingId(sequelize, Dials, Billings, Meter, Servers, meter.id, billing_id)
            .then(function(current_date_result){
              meter_obj.current = current_date_result[0].total;
});

当我运行 callgetStartMeterReadingByMeterIdAndBillingId 时出现无法调用方法“then”错误。我们是否允许返回 Sequelize 承诺,例如 than,然后使用该函数在 else where 处处理。

【问题讨论】:

    标签: promise sequelize.js


    【解决方案1】:

    getStartMeterReadingByMeterIdAndBillingIdfunction 不会根据您的代码示例返回承诺。

    假设getStartDateByBillingId返回一个promise,你应该把代码改成:

    function getStartMeterReadingByMeterIdAndBillingId(sequelize, Dials, Billings, Meter, Server, meter_id, billing_id){
       return getStartDateByBillingId(sequelize,Billings,billing_id)
      .then(function(date){
        return getMeterReadingByMeterIdandDate(sequelize, Dials, Meter, Server, meter_id, date[0].start_date);
      });
    }
    

    【讨论】:

    • 这仍然可能无法获得您想要的结果,因为 getMeterReadingByMeterIdandDate 也不会返回任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多