[英]Want to run console.log once
我在这里有一个函数,我的问题是:如何运行一次 console.log 并且我调用的函数继续运行?
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);
}
也许使用如下标志:
var logged = false;
/*In your function*/
if(!logged)
{
console.log(something);
logged = true;
}
使用 Lodash 的_.once
function log() {
console.log('message')
}
var _log = _.once(log);
_log();
_log();
'message' 将被记录一次。
你可以只使用一个标志:
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);
}
编辑
较短的版本:
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
是添加到全局可用 Window 对象的标志, window.opener++
是增量运算符(使用后缀)。 它递增 window.opener 并在递增之前返回值。 所以在第一个循环中, if (!window.opener++)
计算结果为if (!null)
(null 是一个假值,所以这是真的),并在第二次迭代if (!1)
。 增量运算符也可以用作前缀来返回增量后的值。
https://jsfiddle.net/64atz4kq/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment
多个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");
}
}
为此做了一个功能。
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.