【发布时间】:2020-02-06 08:33:06
【问题描述】:
我正在使用 NodeJs execFile() 来启动一个守护进程。我已经将回调包装在一个承诺中,以便在我的应用程序的其他部分异步使用它。
我了解回调在完成时会发出错误/结果。所以当守护进程失败时,promise 会正确拒绝错误。
问题:当守护进程正确启动时,promise 不会解决任何问题,因为回调尚未完成。
一旦守护进程停止,就会收到响应,因为那是回调生命周期的结束。但为时已晚。
问题:如何跟踪回调的生命周期以让 Promise 解决(callback_in_progress)?
我需要使用节点事件模块来创建事件监听器吗?
这些是模块中的 2 个方法。第一个效果很好,但第二个是我遇到问题的地方。
const { execFile } = require('child_process');
const path = require('path');
const binaryPath = require('./BinaryPaths')
const mcUtil = path.join(binaryPath, 'multichain-util');
const mcd = path.join(binaryPath, 'multichaind');
module.exports = {
createChain: (chainName) => {
return new Promise((resolve, reject) => {
execFile(mcUtil, ['create', chainName], (err, res) => {
err ? reject(err) : resolve(res);
});
});
},
startMultichain: (chainName) => {
return new Promise((resolve, reject) => {
execFile(mcd, [chainName, 'daemon'], (err, res) => {
err ? reject(err.message) : resolve(res);
});
});
},
};
【问题讨论】:
-
你能告诉我们你的代码吗?
-
对不起...我第一次在这里发帖。
-
我使用的二进制文件可以在这里找到multichain.com/download-community
-
@UtkarshPramodGupta 感谢您的解决方案。对不起,我没有回复。我仍在努力解决它……以及其他工作。我猜“执行者”是指内心的承诺?还是“执行者”指的是 execFile 回调?
-
你不必担心什么是executor。只需将 StatefulPromise 类用作 JavaScript 中的原生 Promise 类,除了
then()、catch()或其他属性之外,还有一个名为state的属性。但是,如果您仍然好奇,可以在这里阅读更多内容:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript node.js callback execfile