I have a function here and my question is: How can i run the console.log once and the function that im calling keeps on running?
function zetTemperatuur() {
var handmatigeTemp = document.getElementById("gewenstetemperatuur").value;
var myInterval = setInterval(function () {
if (handmatigeTemp < temperatuur) {
console.log("De motor van de wijnkoeler begint te draaien en zal geleidelijk aan dalen naar de gewenste temperatuur.");
trekAf();
} else if (handmatigeTemp == temperatuur) {
console.log("Uw Wijnkoeler is op de juiste temperatuur, namelijk " + temperatuur + ". De motor zal nu uitschakelen om energie te besparen.");
clearInterval(myInterval);
} else {
clearInterval(myInterval);
}
}, 3000);
}
I have a function here and my question is: How can i run the console.log once and the function that im calling keeps on running?
function zetTemperatuur() {
var handmatigeTemp = document.getElementById("gewenstetemperatuur").value;
var myInterval = setInterval(function () {
if (handmatigeTemp < temperatuur) {
console.log("De motor van de wijnkoeler begint te draaien en zal geleidelijk aan dalen naar de gewenste temperatuur.");
trekAf();
} else if (handmatigeTemp == temperatuur) {
console.log("Uw Wijnkoeler is op de juiste temperatuur, namelijk " + temperatuur + ". De motor zal nu uitschakelen om energie te besparen.");
clearInterval(myInterval);
} else {
clearInterval(myInterval);
}
}, 3000);
}
Share
Improve this question
edited Feb 24, 2014 at 14:03
Florent
12.4k10 gold badges50 silver badges58 bronze badges
asked Feb 24, 2014 at 14:02
user3341530user3341530
211 silver badge5 bronze badges
3
-
4
trekAf
certainly is not the correct way to name that function :P – user1467267 Commented Feb 24, 2014 at 14:04 -
Problem of
trekAf
is that it's too generic. – toasted_flakes Commented Feb 24, 2014 at 14:24 -
And certainly not when
trekAf
is beforerhandmatig
:p – Pieter De Bie Commented May 11, 2018 at 6:11
6 Answers
Reset to default 6Maybe be use a flag like :
var logged = false;
/*In your function*/
if(!logged)
{
console.log(something);
logged = true;
}
Use Lodash's _.once
function log() {
console.log('message')
}
var _log = _.once(log);
_log();
_log();
'message' will be logged once.
You could use just a flag:
function zetTemperatuur() {
var handmatigeTemp = document.getElementById("gewenstetemperatuur").value;
var flag = false;
var myInterval = setInterval(function() {
if (handmatigeTemp < temperatuur) {
if (flag == false) {
flag = true;
console.log("De motor van de wijnkoeler begint te draaien en zal geleidelijk aan dalen naar de gewenste temperatuur.");
}
trekAf();
}
else if (handmatigeTemp == temperatuur) {
console.log("Uw Wijnkoeler is op de juiste temperatuur, namelijk " + temperatuur + ". De motor zal nu uitschakelen om energie te besparen.");
clearInterval(myInterval);
}
else {
clearInterval(myInterval);
}
}, 3000);
}
EDIT
Shorter version:
function zetTemperatuur() {
var handmatigeTemp = document.getElementById("gewenstetemperatuur").value;
var flag = false;
var myInterval = setInterval(function() {
if (handmatigeTemp < temperatuur) {
(!flag) && (flag = true);
console.log("De motor van de wijnkoeler begint te draaien en zal geleidelijk aan dalen naar de gewenste temperatuur.");
trekAf();
}
else if (handmatigeTemp == temperatuur) {
console.log("Uw Wijnkoeler is op de juiste temperatuur, namelijk " + temperatuur + ". De motor zal nu uitschakelen om energie te besparen.");
clearInterval(myInterval);
}
else {
clearInterval(myInterval);
}
}, 3000);
}
setInterval(function() {
if (!window.opener++) {
console.log("print's once")
}
else {
console.log("print's the remaining times")
}
}, 3000);
opener
is a flag added to the globally available Window object, and window.opener++
is an increment operator (used postfix). It increments window.opener and returns the value before incrementing. So on the first loop, if (!window.opener++)
evaluates to if (!null)
(null is a falsey value, so this is true), and on the second iteration if (!1)
. The increment operator can also be used prefix to return the value after incrementing.
https://jsfiddle/64atz4kq/
https://developer.mozilla/en-US/docs/Web/JavaScript/Reference/Operators/Increment
Solution for multiple console.logs
var flag = array();
var logger = function(id, message) {
if(!flag[id]) {
console.log(message);
flag[id] = true;
}
}
var yourFunction = function(something) {
// your code here
if(something) {
logger(1, "german german deutch");
}
else {
logger(2, "another german");
}
}
Made a function for this.
console.logOnce = function(msg) {
window.__loggedFunctions = window.__loggedFunctions || [];
var caller = arguments.callee.caller.toString();
for (var i = 0; i < __loggedFunctions.length; i++ ) {
if (caller == __loggedFunctions[i]) return;
}
window.logOnce = arguments;
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
__loggedFunctions.push(caller);
}