簡體   English   中英

PM2刪除Node.js API中的function問題

[英]PM2 delete function problem in Node.js API

PM2(版本 5.1.0) pm2.delete(process, errback) function 有一個非常煩人的問題。 經過兩天的調試,試圖找到問題的根源,它開始看起來像是與PM2庫本身有關的問題。

這是我正在做的簡化代碼片段。 后面我會解釋這個問題。

const debug = require("debug")("...");
const pm2 = require("pm2");
const Database = require("./Database");

...

class Backend {
  static cleanup() {
    return new Promise((resolve, reject) => {
      pm2.connect((error) => {
        if (error) {
          debug("...");

          reject();

          return;
        }

        // MongoDB query and async forEach iteration
        Database.getCollection("...").find({
          ...
        })
        .forEach((document) => {
          pm2.delete("service_...", (error, process) => {
            if (!error && process[0].pm2_env.status === "stopped") {
              debug("...");
            } else {
              debug("...");
            }
          });
        })
        .catch(...)
        .then(...);
      }
    });
  }

  ...
}

現在的問題是:我的進程沒有被終止,並且pm2.delete(process, errback) errback errback 根本沒有執行。

  • 我打印了連接回調的錯誤參數,它始終是null ,因此成功建立了與 PM2 的連接
  • 我直接在刪除回調的開頭放置了調試文本,它沒有被打印出來
  • 我將刪除 function 包裝在一個 while 循環中,只有在刪除回調至少執行一次並且循環永遠運行時才會停止
  • I started a debug session and noticed that PM2's delete function in node_modules/pm2/lib/API.js (line 533) gets called, but for some reason the process does not get terminated and my provided callback function is not executed at all (I在調試模式下逐步執行命令,但仍然無法判斷在哪里執行回調失敗(雖然它似乎發生在 PM2 的 API.js 中)
  • 我還注意到,在帶有斷點的調試模式下逐步運行代碼時,如果我在中間的某個點取消執行,有時我的進程會被 API 調用終止(但是,回調仍未執行)
  • 我也在我的軟件的另一個地方使用了 PM2 的 delete function 並且它在那里工作就像一個魅力

所以由於某種原因, pm2.delete(process, errback)沒有正確執行,我現在不知道該怎么做。 是否有人對 PM2 的源代碼有經驗或在某些時候遇到過類似的問題? 任何意見將是有益的。

看來我找到了問題的根源:

在 forEach 調用之后的 promise 鏈的稍后位置,我使用pm2.disconnect(); . 經過進一步調查,我注意到它沒有完全同步,這意味着在我的情況下,PM2 在刪除 function 完全完成之前斷開連接。 這給出了描述的結果和奇怪的調試行為。

總而言之,API 工作得非常好,但必須非常注意異步代碼,因為它會導致非常復雜的行為,也很難調試。

必須確保刪除功能在pm2.disconnect();之前真正完成。 叫做。

暫無
暫無

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

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