[英]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.