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