I currently have a function that scans a barcode or QR code and returns the result:
function onScanSuccess(decodedText, decodedResult) {
console.log(`Code scanned = ${decodedText}`, decodedResult);
}
var html5QrcodeScanner = new Html5QrcodeScanner(
"qr-reader", { fps: 10, qrbox: 250 });
html5QrcodeScanner.render(onScanSuccess);
It works great but the problem i have is that it scans the code very fast and multiple times.
Is there a way to timeout the function so it only return the scans every second?
CodePudding user response:
The easiest way to do that is to set a flag variable and console.log the result if the flag is true. something like that:
var flag = true;
function onScanSuccess(decodedText, decodedResult) {
if(flag){
console.log(`Code scanned = ${decodedText}`, decodedResult);
flag = false;
}
}
setInterval(()=>flag=true, 1000);
var html5QrcodeScanner = new Html5QrcodeScanner(
"qr-reader", { fps: 10, qrbox: 250 });
html5QrcodeScanner.render(onScanSuccess);
There's another way too. we can change the flag with setTimeout in the onScanSuccess function.
var flag = true;
function onScanSuccess(decodedText, decodedResult) {
if(flag){
console.log(`Code scanned = ${decodedText}`, decodedResult);
flag = false;
setTimeout(()=>flag=true, 1000);
}
}
var html5QrcodeScanner = new Html5QrcodeScanner(
"qr-reader", { fps: 10, qrbox: 250 });
html5QrcodeScanner.render(onScanSuccess);
CodePudding user response:
First of all, thanks for all the answers and comments.
In the end it worked with the tweaking of the fps. I changed the fps: 10 to fps: 1. Thanks @nicael for that answer.
var html5QrcodeScanner = new Html5QrcodeScanner(
"qr-reader", { fps: 1, qrbox: 250 });
html5QrcodeScanner.render(onScanSuccess);
If you searched for an answer to disable a function for a specific time, look at @Alireza Jahandoost answer that one's perfect for that case.