如何从同一类中的另一个调用另一个原型异步函数

时间:2020-08-11 16:27:55

标签: node.js promise async-await

我有一个异步原型函数,并且从另一个异步原型函数调用了它。但是,我得到了下面的错误。如何解决?

我使用的是node.js v14.1.0。

UnhandledPromiseRejectionWarning:TypeError:this.saySomething2不是函数

const Person = function() {
  console.log("CALLED PERSON");
};

Person.prototype.saySomething = async function() {
  this.saySomething2();
};

Person.prototype.saySomething2 = async function() {
  //do something
  console.log("hello");
};

(async function() {
  var ape = new Person();
  await ape.saySomething();
}());

更新:添加实际代码。

// constructor function for the KingInfo class
function KingInfo(
  date,
  employeeKey,
  workDayTypeName) {
    this._date = date;
    this._employeeKey = employeeKey;
    this._workDayTypeName = workDayTypeName;
}

KingInfo.prototype.sync = async function(){
  var isSucceed = false;

  let syncType = await this.getSyncType();

  if(syncType === "post"){

  }
  else if(syncType === "patch"){

  }
  else{

  }

  return isSucceed;
}

//@return: "post", "patch", "none"
KingInfo.prototype.getSyncType = async function(){
  let syncType = "none";

  let sql = [];
  sql.push("SELECT count(*) as count");
  ...

  let records = await db_module.query(sql.join(""));
  let count = records[0].count;

  if(count <= 0){
    syncType = "post";
  }
  else{
    let isSame = await this.compareToDataInDB();

    if(!isSame){
      syncType = "patch";
    }
  }

  return syncType;
}

KingInfo.prototype.compareToDataInDB = async function(){
  let date = this._date;
  let empKey = this._employeeKey;

  let sql = [];
  sql.push("SELECT workDayTypeName");
  ...

  let records = await db_module.query(sql.join(""));
  let record = records[0];

  let res = false;
  if(workDayTypeName === record.workDayTypeName){
    res = true;
  }

  return res;
}

(async function(){
  let date = "2020-08-01";
  let employeeKey = "";
  let workDayTypeName = "aaaaa";

  let kingInfo = new KingInfo(
    date,
    employeeKey,
    workDayTypeName);

  kingInfo.sync();
}());

module.exports = {
    KingInfo: KingInfo
}

我收到此错误:

UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“ _date”

UnhandledPromiseRejectionWarning:TypeError:this.compareToDataInDB不是函数

更新: 为数据库模块添加代码。

此模块可能会产生严重影响?

db.js

"use strict";
const mysql = require('mysql');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'something'
});

function query(sql){
  return new Promise(function(resolve, reject) {
    connection.connect((err) => {
      if (err) throw err;

      connection.query(sql, function (err, result, fields) {
        if (err) throw err;
        resolve(result);
      });
    });
  });
}

module.exports = {
    query: query
}

0 个答案:

没有答案