[英]Pause console output using Node.js
我正在嘗試僅使用控制台而不是在網頁上創建時間顯示 (h:mm:ss)。 最初應設置時間,然后在更改時顯示時間。
當使用輸出控制台(在 Web 瀏覽器中)或在 vscode 中時,js 或 node.js 是否有可能在打印數千/多個輸出時在控制台中打印的每個輸出之間存在延遲而不使用擴展?
下面是每 1 秒將當前時間打印到控制台的示例:
// setInterval() executes the given function on a given time interval setInterval(() => { console.log(new Date().toTimeString()); // function to execute }, 1000) // execute every 1000 ms
您還可以打印自己的計數器:
let secondsElapsed = 0 setInterval(() => { console.log(`seconds elapsed = ${secondsElapsed}`); secondsElapsed++; }, 1000)
以下是如何完成您似乎要求的內容:
const clockTick = (callback) => { const tick = () => { const now = Date.now(); callback(now); setTimeout(tick, 1000 - (now % 1000)); } tick(); } clockTick(timestamp => { const date = new Date(timestamp); const hours = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); console.log(`${hours}:${minutes}:${seconds}`); });
接受的答案不正確。 IMO,我們應該實現一個隊列或類似的東西,以實現“每個輸出之間的延遲”。 我覺得這個問題很有趣,所以我為了一些樂趣而實現了這段代碼(使用承諾鏈作為一個簡單的隊列):
const callNext = (function () {
let queueChain = Promise.resolve();
// Called after previous command (1 second by default)
function callNext(func, delay = 1000) {
queueChain = queueChain.then(() => {
return new Promise((res) => {
setTimeout(() => {
func();
res();
}, delay);
});
});
}
return callNext;
})();
callNext(() => {
console.log('run after 3s')
}, 3000);
callNext(() => {
console.log('run after the above 3s')
}, 3000);
callNext(() => {
console.log('run after the above 1s by default')
});
我們可以使用上面的callNext
創建一個簡單的記錄器以獲得更清晰的語法:
const logger = (function () {
function createLogFn(name) {
return function (...args) {
let delay = 1000;
// take the last argument as "delay" param
if (typeof args[args.length -1] === 'number') {
delay = args.pop();
}
callNext(() => {
console[name](`${name.toUpperCase()} [${(new Date().toISOString())}]: `, ...args);
}, delay);
};
}
const logger = {
log: createLogFn('log'),
info: createLogFn('info'),
debug: createLogFn('debug'),
error: createLogFn('error'),
}
return logger;
})();
logger.log('run after 3s', 3000);
logger.log('run after the above 3s', 3000);
logger.log('run after the above 1s');
logger.info('final run after the above 2s', 2000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.