Hi
i am using node-zklib package
it works but if there any error NR will stop running because of Uncaught Exception
my question is how can i handle all errors of this module to prevent NR form Stop ?
This is a sample of error
1 May 13:46:02 - [red] Uncaught Exception:
1 May 13:46:02 - UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#<ZKError>".
C:\Users\USER>
//172.16.12.201
const test = async () => {
let zkInstance = new ZKLib('172.16.12.201', 4370, 10000, 4000);
try {
// Create socket to machine
await zkInstance.createSocket()
// Get general info like logCapacity, user counts, logs count
// It's really useful to check the status of device
node.warn(await zkInstance.getInfo())
} catch (e) {
node.warn(e)
if (e.code === 'EADDRINUSE') {
}
}
// Get users in machine
const users = await zkInstance.getUsers()
node.warn(users)
// Get all logs in the machine
// Currently, there is no filter to take data, it just takes all !!
const logs = await zkInstance.getAttendances()
node.warn(logs)
const attendances = await zkInstance.getAttendances((percent, total) => {
// this callbacks take params is the percent of data downloaded and total data need to download
})
// YOu can also read realtime log by getRealTimelogs function
// node.warn('check users', users)
zkInstance.getRealTimeLogs((data) => {
// do something when some checkin
node.warn(data)
})
// delete the data in machine
// You should do this when there are too many data in the machine, this issue can slow down machine
// Get the device time
//const getTime = await zkInstance.getTime();
//node.warn(getTime.toString());
// Disconnect the machine ( don't do this when you need realtime update :)))
await zkInstance.disconnect()
}
test()
return msg;
Please note that the main topic is how to handle the error to prevent stopping NR not how solve the error
1 May 14:42:22 - [red] Uncaught Exception:
1 May 14:42:22 - UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#<ZKError>".
C:\Users\USER>
//172.16.12.201
const test = async () => {
let zkInstance = new ZKLib('172.16.12.201', 4370, 10000, 4000);
try {
// Create socket to machine
await zkInstance.createSocket()
// Get general info like logCapacity, user counts, logs count
// It's really useful to check the status of device
node.warn(await zkInstance.getInfo())
} catch (e) {
node.error(e, msg);
node.warn(e)
if (e.code === 'EADDRINUSE') {
}
}
// Get users in machine
try {
const users = await zkInstance.getUsers()
node.warn(users)
} catch(e) {
node.error(e, msg);
return;
}
// Get all logs in the machine
// Currently, there is no filter to take data, it just takes all !!
const logs = await zkInstance.getAttendances()
node.warn(logs)
try {
const attendances = await zkInstance.getAttendances((percent, total) => {
// this callbacks take params is the percent of data downloaded and total data need to download
})
} catch(e) {
node.error(e, msg);
return;
}
// YOu can also read realtime log by getRealTimelogs function
// node.warn('check users', users)
/*
zkInstance.getRealTimeLogs((data) => {
// do something when some checkin
node.warn(data)
})
*/
// delete the data in machine
// You should do this when there are too many data in the machine, this issue can slow down machine
// Get the device time
//const getTime = await zkInstance.getTime();
//node.warn(getTime.toString());
// Disconnect the machine ( don't do this when you need realtime update :)))
try {
await zkInstance.disconnect()
} catch(e) {
node.error(e, msg);
return;
}
}
test()
return msg;
Put console.error(e); below node.error(e, msg);, & check the console - what do you see?
Change node.warn(e) to node.warn({error: e});, what do you see?
Hi
after period of success of handling error
now i have some unhandled error
8 May 11:32:56 - [red] Uncaught Exception:
8 May 11:32:56 - TypeError: Cannot read property 'removeListener' of null
at internalCallback (C:\Users\USER\.node-red\node_modules\node-zklib\zklibtcp.js:116:21)
at Timeout._onTimeout (C:\Users\USER\.node-red\node_modules\node-zklib\zklibtcp.js:129:13)
at listOnTimeout (node:internal/timers:555:17)
at processTimers (node:internal/timers:498:7)
This is my code even i catch all the possible error
//172.16.12.201
const test = async () => {
let zkInstance = new ZKLib('172.16.12.201', 4370, 10000);
try {
// Create socket to machine
await zkInstance.createSocket()
// Get general info like logCapacity, user counts, logs count
// It's really useful to check the status of device
node.warn(await zkInstance.getInfo())
} catch (e) {
node.warn(["Create socket", { "error": e }])
node.error(e, msg);
console.error(e)
if (e.code === 'EADDRINUSE') {
}
}
// Get users in machine
try {
var users = await zkInstance.getUsers()
node.warn(users)
} catch (e) {
node.warn(["getUsers", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
// Get all logs in the machine
// Currently, there is no filter to take data, it just takes all !!
try {
var logs = await zkInstance.getAttendances()
for (let log_list = 0; log_list < logs.data.length; log_list++) {
let newDate=new Date(logs.data[log_list].recordTime).toLocaleString("en-GB")
logs.data[log_list].recordTime = newDate.slice(0, 10) + newDate.slice(11);//remove comma
for (let usr_list = 0; usr_list < users.data.length; usr_list++) {
if (users.data[usr_list].userId == logs.data[log_list].deviceUserId) {
logs.data[log_list].name = users.data[usr_list].name
}
}
}
node.warn(logs)
} catch (e) {
node.warn(["getAttendances", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
try {
const getTime = await zkInstance.getTime()
node.warn(getTime.toLocaleString("en-GB")
);
} catch (e) {
node.warn(["getTime", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
try {
node.warn(["Read saved data", await zkInstance.executeCmd(11)])
} catch (e) {
node.warn(["Read saved data", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
try {
await zkInstance.freeData()
} catch (e) {
node.warn(["freeData()", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
try {
await zkInstance.disconnect()
} catch (e) {
node.warn(["disconnect", { "error": e }])
node.error(e, msg);
console.error(e)
return;
}
return logs;
}
msg=test()
return msg;