Как описано в моем первом комментарии, вы не возвращаете обещание от вашей функции подключения. Это означает, что вы не можете ждать данных вне вашей функции подключения. Даже если вы устанавливаете данные глобально в then
, они будут доступны только с этого момента, и я предполагаю, что ваши console.log()
глобальной переменной уже напечатаны, так как вы не ожидали установления соединений sh.
Вот очень грубое исправление вашего кода:
const elkClient = require('elk-client');
class Alarmpanel {
constructor(siteName, zoneName, host, port, secure, area) {
this.siteName = siteName;
this.zoneName = zoneName;
this.host = host;
this.port = port;
this.secure = secure;
this.area = area;
this.armed;
}
set armStatus(state) {
this.armed = state;
return state;
}
connect() {
const ElkClient = elkClient.ElkClient;
let client = new ElkClient({
connection: {
name: this.zoneName,
host: this.host,
port: this.port ,
secure: this.secure,
}
});
return client
.connect()
.then(() => client.getArmingStatus())
.then((data) => {
const armingdata = data.areas[this.area].armUpState;
const armBool = this.armingState(armingdata);
const panelInfo = {
name: this.siteName,
armed: armBool
}
return panelInfo;
})
.catch((err) => console.log("----Connection Error --------"));
}
armingState(data) {
if(data === 49) {
this.armStatus = false;
return this.armed;
} else if (data === 50) {
this.armStatus = false;
return this.armed;
} else if (data === 51) {
this.armStatus = true;
return this.armed;
} else if (data === 52) {
this.armStatus = true;
return this.armed;
} else if (data === 53) {
this.armStatus = true;
return this.armed;
} else if (data === 54) {
this.armStatus = true;
return this.armed;
} else if (data === 48) {
this.armStatus = false;
return this.armed;
}
}
}
const site1 = new Alarmpanel("Site1", "Main House", IP , PORT, true, 0);
const site2 = new Alarmpanel("Site2", "Exterior", IP, PORT, true, 1);
const site3 = new Alarmpanel("Site3", "Exterior", IP, PORT, true, 2);
const site4 = new Alarmpanel("Site4", "Guest House", IP , PORT, true, 3);
const site5 = new Alarmpanel("Site5", "Main House", IP, PORT, true, 0);
const site6 = new Alarmpanel("Site6", "Exterior", IP, PORT, true, 1);
const site7 = new Alarmpanel("Site7", "Main House", IP, PORT, true, 0);
async function connect() {
const statuses = [
await site1.connect(),
await site2.connect(),
await site3.connect(),
await site4.connect(),
await site5.connect(),
await site6.connect(),
await site7.connect(),
];
console.log(statuses);
}
connect();
Я специально не использую какие-либо причудливые обещания, но вы можете посмотреть на Promise.all, чтобы улучшить это. код!