最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Want to run console.log once - Stack Overflow

programmeradmin4浏览0评论

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 beforer handmatig :p – Pieter De Bie Commented May 11, 2018 at 6:11
Add a ment  | 

6 Answers 6

Reset to default 6

Maybe 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);
}
发布评论

评论列表(0)

  1. 暂无评论