簡體   English   中英

當 API 端點被命中時運行腳本,並在再次命中時檢查該腳本是否正在運行 - Node.js

[英]Run a script when API endpoint is hit, and check if that script is running when hit again - Node.js

我正在研究一個 node.js API,當某個端點被命中時,它需要啟動/運行一個耗時的 javaScript 文件。 我已經完成了這項工作,但我現在正在尋找一種方法來阻止腳本再次運行,如果它已經在運行並且端點再次被擊中。

我嘗試使用 child_process 庫,希望如果腳本作為獨立於主 node.js 應用程序的進程執行,則更容易檢查腳本是否已經在運行。 我曾想過為我創建的子進程使用進程退出事件,但這被證明是無用的,因為它只會在進程完成后運行,但無助於檢查它當前是否正在運行。

我也考慮過 cron 作業,但似乎沒有一個好方法可以在不制定基於時間的計划的情況下根據命令啟動 cron 作業。

在另一個項目中,我使用了一個數據庫並簡單地在表中創建了一個新行來指示腳本是否可以運行、當前正在運行或已完成。 我絕對可以再次這樣做,但我正在努力使這個項目盡可能輕松。

最后,我確實考慮過添加一些全局 state 變量來指示進程是否正在運行,但不確定這是否是最好的方法。

因此,如果有人知道一種方法來檢查子進程腳本當前是否正在運行,或者有更好的方法來實現我在這里想要實現的目標,那么任何方向都會有所幫助。

你可以使用一個變量,它甚至不必是全局的!

class MySingletonProcess {
  constructor() {
    this.isBusy = false;
  }

  async doProcess() {
    console.log("Doing process...");
    // fake async stuff...
    return new Promise((resolve) => {
      setTimeout(() => {
        this.isBusy = false;
        resolve();
      }, 2500);
    });
  }

  spawnProcess() {
    if (this.isBusy) {
      console.log("I'm busy!");
      return;
    } else {
      this.isBusy = true;
      this.doProcess();
    }
  }
}

在 Codepen 上試用

暫無
暫無

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

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