Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript类不是构造函数_Javascript_Oop - Fatal编程技术网

Javascript类不是构造函数

Javascript类不是构造函数,javascript,oop,Javascript,Oop,我有一个状态机,在那里我进行从一个状态到另一个状态的转换。(例如ReserveState->StartState) 在这个特殊情况下,我有一个从ReserveFailedVMState到ReserveVMState的转换 ReserveFailedVMState的代码: const { AbstractVMCtrlState } = require("./AbstractVMCtrlState"); const { ReserveVMState } = require(&qu

我有一个状态机,在那里我进行从一个状态到另一个状态的转换。(例如ReserveState->StartState)

在这个特殊情况下,我有一个从ReserveFailedVMState到ReserveVMState的转换

ReserveFailedVMState的代码:

const { AbstractVMCtrlState } = require("./AbstractVMCtrlState");
const { ReserveVMState } = require("./ReserveVMState");
const { TerminateDuringReservationState } = require("./TerminateDuringReservationState");
const { ResourceUnavailableState } = require("./ResourceUnavailableState");

//>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
//###START_CUSTOMCODE1
const { Config } = require("../config/Config");
const { Tasker } = require("../libs/tasker/src/Tasker");
//###END_CUSTOMCODE1
class ReserveVMFailedState extends AbstractVMCtrlState {
  //>>>> don't change the CUSTOM CODE comments, if you do generation will overwrite your code >>>>
  //###START_CUSTOMCODE2
  async onEnterState() {
    //TODO: try to remove the reservation, if exists
    this.logMsg("Could not reserve a VM");
    const config = Config.getConfig();
    if (this.SM.getQueueReservationRetries() <= config.queueReservation.requeueReservationMaxRetries) {
      this.logMsg("Retrying queue for Starting a Reservation, attempt # " + this.SM.getQueueReservationRetries());
      this.SM.setIncreaseQueueReservationRetries();
      await this.retryReserveVMCloudTask();
    } else {
      this.logMsg("After maxRetries, reservation could not be done");
      await this.SM.resourceUnavailable();
    }
  }

  // kicking off a cloud task for retrying to reserve a VM
  async retryReserveVMCloudTask() {
    const run_id = this.getRunId();
    const tasker = new Tasker();
    const vmStartTaskId = await tasker.sendRetryReserveVM(run_id);
    this.SM.setVmStartTaskId(vmStartTaskId);
  }
  //###END_CUSTOMCODE2

  constructor() {
    super();
  }

  async onExitState() {}

  reserveVM() {
    this.logMsg("holaaaaa");
    return new ReserveVMState();
  }

  terminateRequested() {
    return new TerminateDuringReservationState();
  }

  resourceUnavailable() {
    return new ResourceUnavailableState();
  }
}

const serialijse = require("serialijse");
serialijse.declarePersistable(ReserveVMFailedState);

module.exports = { ReserveVMFailedState };
我实现了一个记录器,当我尝试此转换时,会出现以下错误:

[OSM]5f64cae6df60d0c4734aa87b-OSM异常:类型错误:ReserveVMState不是构造函数

我尝试过不同的方法,但似乎都不管用,我在这里遗漏了什么


提前感谢console.log上的提示,我意识到我的ReserveVMState未定义,这有点奇怪。在进行调查之后,问题是由于NodeJs“require”引起的,我使用此链接作为帮助,我的最终解决方案是将ReserveVMFailedState上的“require”更改为此

const { ReserveVMState } = requireUncached("./ReserveVMState");

上面的链接上提供了requireUncached函数。

如果您
console.log(ReserveVMState)
,会发生什么情况?在我的ReserveVMFailedState类上,它是未定义的!,有趣的是,我在前面的转换中使用了相同的引用,console.log throws是一个函数。[函数:ReserveVMState]
const { ReserveVMState } = requireUncached("./ReserveVMState");