[英]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 的連接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 中)所以由於某種原因, pm2.delete(process, errback)
沒有正確執行,我現在不知道該怎么做。 是否有人對 PM2 的源代碼有經驗或在某些時候遇到過類似的問題? 任何意見將是有益的。
看來我找到了問題的根源:
在 forEach 調用之后的 promise 鏈的稍后位置,我使用pm2.disconnect();
. 經過進一步調查,我注意到它沒有完全同步,這意味着在我的情況下,PM2 在刪除 function 完全完成之前斷開連接。 這給出了描述的結果和奇怪的調試行為。
總而言之,API 工作得非常好,但必須非常注意異步代碼,因為它會導致非常復雜的行為,也很難調試。
必須確保刪除功能在pm2.disconnect();
之前真正完成。 叫做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.