簡體   English   中英

使用 Node.js 暫停控制台輸出

[英]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);

看看: https : //jsfiddle.net/pk5oqfxa/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM